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:local
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')); } }
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!