Comment créer des microservices en php

(*-*)浩
Libérer: 2023-02-25 17:58:02
original
4415 Les gens l'ont consulté

Comment créer des microservices en php

Hyperf (Apprentissage recommandé : Tutoriel vidéo PHP)

Pour les développeurs Java, la technologie est assez mature Il existe de nombreux frameworks de microservices parmi lesquels choisir :

[Dubbo](https://dubbo.apache.org/zh-cn/)
[Spring Cloud](https://www.springcloud.cc/)
Copier après la connexion

En tant que PHPer, j'ai utilisé Google pour vérifier "PHP + Microservices" et j'ai constaté qu'il y avait très peu de contenu connexe utile et aucune valeur de référence substantielle, une mélancolie infinie.

Heureusement, certains maîtres ont implémenté un framework de coroutine PHP hautes performances et très flexible [Hyperf](https://www.hyperf.io/) basé sur l'extension Swoole et fournit les composants associés. de l’architecture des microservices.

Hyperf est un framework de coroutine PHP hautes performances et très flexible basé sur `Swoole 4.3+`. Il dispose d'un serveur de coroutine intégré et d'un grand nombre de composants couramment utilisés. avec le « PHP-FPM » traditionnel. Le framework a été qualitativement amélioré, offrant des performances ultra-élevées tout en conservant une évolutivité extrêmement flexible. Les composants standards sont tous implémentés sur la base du [standard PSR](https://www.php-fig.org. /psr), basé sur la puissante conception d'injection de dépendances garantit que la plupart des composants ou classes sont « remplaçables » et « réutilisables ».

Ainsi, après avoir acquis les connaissances de base sur l'architecture des microservices, j'ai utilisé le framework Hyperf pour créer un cluster de microservices basé sur PHP. Voici l'adresse du code source du projet :

https://github.com/Jochen-z/php-microservice-demo
Copier après la connexion
<. 🎜>

Le projet est construit à l'aide de Dokcer, le code `docker-compose.yml` est le suivant :

version:"3"
services:
consul-server- leader:
image:consul:latest
container_name:consul-server-leader
command:"agent -server -bootstrap -ui -node=consul-server-leader -client=0.0.0.0"
environment:
- CONSUL_BIND_INTERFACE=eth 0
ports:
- "8500:8500"
networks:
- microservice
microservice- 1:
build:
context:.
container_name:"microservice-1"
command:"php bin/hyperf.php start"
depends_on:
- "consul-server-leader"
volumes:
- ./www/microservice- 1:/var/www
networks:
- microservice
tty:true
microservice- 2:
build:
context:.
container_name:"microservice-2"
command:"php bin/hyperf.php start"
depends_on:
- "consul-server-leader"
volumes:
- ./www/microservice- 2:/var/www
networks:
- microservice
tty:true
app:
build:
context:.
container_name:"app"
command:"php bin/hyperf.php start"
depends_on:
- "microservice-1"
volumes:
- ./www/ web:/var/www
ports:
- "9501:9501"
networks:
- microservice
tty:true
networks:
microservice:
driver:bridge
volumes:
microservice:
driver:local
Copier après la connexion

Un conteneur Consul `consul-server-leader` est démarré ici en tant que enregistrement du service et service Les composants découverts, les conteneurs « microservice-1 » et « microservice-2 » fournissent respectivement des services pour les opérations d'addition et de division.

En tant qu'appelant du service, le conteneur `app` est configuré avec l'URL du conteneur `consul-server-leader` et obtient les services `microservice-1` et `microservice-2` en accédant à ` Adresse IP et port de consul-server-leader, puis « app » appelle le service d'addition et de division via le protocole RPC pour obtenir les résultats et les renvoyer à l'utilisateur.

Le conteneur `app` est une application Web, déploie un projet Hyperf et fournit des services HTTP au monde extérieur.

Par exemple, il existe une méthode `add` dans le contrôleur `AppControllerIndexController` :

publicfunctionadd(AdditionService $addition)
{
$a = (int) $this->request->input( &#39;a&#39;, 1); # 接受前端用户参数
$b = (int) $this->request->input( &#39;b&#39;, 2);
return[
&#39;a&#39;=> $a,
&#39;b&#39;=> $b,
&#39;add&#39;=> $addition->add($a, $b) # RPC调用
];
}
在 `AppJsonRpcAdditionService` 中 `add` 的实现:
classAdditionServiceextendsAbstractServiceClient
{
/**
* 定义对应服务提供者的服务名称
* @varstring
*/
protected$serviceName = &#39;AdditionService&#39;;
/**
* 定义对应服务提供者的服务协议
* @varstring
*/
protected$protocol = &#39;jsonrpc-http&#39;;
publicfunctionadd(int $a, int $b): int
{
return$this->__request( __FUNCTION__, compact( &#39;a&#39;, &#39;b&#39;));
}
}
Copier après la connexion
Hérite de `AbstractServiceClient` pour créer une classe de requête client de microservice, Hyperf aide nous implémentons les détails de l'interaction avec Consul et les fournisseurs de services au niveau inférieur. Nous n'avons besoin que de la méthode `add` dans la classe `AddionService` pour appeler à distance les services fournis par `microservice-1` et `microservice-2`.

À ce stade, la construction du cluster de microservices PHP est terminée !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal