Maison >développement back-end >Problème PHP >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/)
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<.>
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:localUn 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( 'a', 1); # 接受前端用户参数 $b = (int) $this->request->input( 'b', 2); return[ 'a'=> $a, 'b'=> $b, 'add'=> $addition->add($a, $b) # RPC调用 ]; } 在 `AppJsonRpcAdditionService` 中 `add` 的实现: classAdditionServiceextendsAbstractServiceClient { /** * 定义对应服务提供者的服务名称 * @varstring */ protected$serviceName = 'AdditionService'; /** * 定义对应服务提供者的服务协议 * @varstring */ protected$protocol = 'jsonrpc-http'; publicfunctionadd(int $a, int $b): int { return$this->__request( __FUNCTION__, compact( 'a', 'b')); } }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!