当前位置:Gxlcms > PHP教程 > php如何搭建微服务

php如何搭建微服务

时间:2021-07-01 10:21:17 帮助过:7人阅读

Hyperf (推荐学习:PHP视频教程)

对于 Java 开发者来说,有技术相当成熟的微服务框架可供选择:

  1. [Dubbo](https://dubbo.apache.org/zh-cn/)
  2. [Spring Cloud](https://www.springcloud.cc/)

作为一名 PHPer,我用 Google 查了一下「PHP + 微服务」,发现有用的相关内容少之又少 ,没有什么实质性的参考价值,无限惆怅。

幸好,有大神在基于 Swoole 扩展的基础上,实现了高性能、高灵活性的 PHP 协程框架 [Hyperf](https://www.hyperf.io/) ,并提供了微服务架构的相关组件。

Hyperf 是基于 `Swoole 4.3+` 实现的高性能、高灵活性的 PHP 协程框架,内置协程服务器及大量常用的组件,性能较传统基于 `PHP-FPM` 的框架有质的提升,提供超高性能的同时,也保持着极其灵活的可扩展性,标准组件均基于 [PSR 标准](https://www.php-fig.org/psr) 实现,基于强大的依赖注入设计,保证了绝大部分组件或类都是 `可替换` 与 `可复用` 的。

于是,我在学习了微服务架构相关的基础知识之后,使用 Hyperf 框架构建了一个基于 PHP 的微服务集群,这是项目源码地址:

  1. https://github.com/Jochen-z/php-microservice-demo

该项目使用 Dokcer 搭建,`docker-compose.yml` 代码如下:

  1. version:"3"
  2. services:
  3. consul-server- leader:
  4. image:consul:latest
  5. container_name:consul-server-leader
  6. command:"agent -server -bootstrap -ui -node=consul-server-leader -client=0.0.0.0"
  7. environment:
  8. - CONSUL_BIND_INTERFACE=eth 0
  9. ports:
  10. - "8500:8500"
  11. networks:
  12. - microservice
  13. microservice- 1:
  14. build:
  15. context:.
  16. container_name:"microservice-1"
  17. command:"php bin/hyperf.php start"
  18. depends_on:
  19. - "consul-server-leader"
  20. volumes:
  21. - ./www/microservice- 1:/var/www
  22. networks:
  23. - microservice
  24. tty:true
  25. microservice- 2:
  26. build:
  27. context:.
  28. container_name:"microservice-2"
  29. command:"php bin/hyperf.php start"
  30. depends_on:
  31. - "consul-server-leader"
  32. volumes:
  33. - ./www/microservice- 2:/var/www
  34. networks:
  35. - microservice
  36. tty:true
  37. app:
  38. build:
  39. context:.
  40. container_name:"app"
  41. command:"php bin/hyperf.php start"
  42. depends_on:
  43. - "microservice-1"
  44. volumes:
  45. - ./www/ web:/var/www
  46. ports:
  47. - "9501:9501"
  48. networks:
  49. - microservice
  50. tty:true
  51. networks:
  52. microservice:
  53. driver:bridge
  54. volumes:
  55. microservice:
  56. driver:local

这里启动了一个 Consul 容器 `consul-server-leader` 作为服务注册和服务发现的组件,容器 `microservice-1` 和 `microservice-2` 分别提供了加法运算和除法运算的服务。

容器 `app` 作为服务调用方,配置了 `consul-server-leader` 容器的 URL,通过访问 `consul-server-leader` 获取 `microservice-1` 和 `microservice-2` 服务的 IP 地址和端口,然后 `app` 通过 RPC 协议调用加法运算和除法运算的服务获取结果并返回给用户。

`app` 容器为 Web 应用,部署了一个 Hyperf 项目并对外提供 HTTP 服务。

例如,在 `AppControllerIndexController` 控制器里有 `add` 方法:

  1. publicfunctionadd(AdditionService $addition)
  2. {
  3. $a = (int) $this->request->input( 'a', 1); # 接受前端用户参数
  4. $b = (int) $this->request->input( 'b', 2);
  5. return[
  6. 'a'=> $a,
  7. 'b'=> $b,
  8. 'add'=> $addition->add($a, $b) # RPC调用
  9. ];
  10. }
  11. 在 `AppJsonRpcAdditionService` 中 `add` 的实现:
  12. classAdditionServiceextendsAbstractServiceClient
  13. {
  14. /**
  15. * 定义对应服务提供者的服务名称
  16. * @varstring
  17. */
  18. protected$serviceName = 'AdditionService';
  19. /**
  20. * 定义对应服务提供者的服务协议
  21. * @varstring
  22. */
  23. protected$protocol = 'jsonrpc-http';
  24. publicfunctionadd(int $a, int $b): int
  25. {
  26. return$this->__request( __FUNCTION__, compact( 'a', 'b'));
  27. }
  28. }

继承了 `AbstractServiceClient` 即可创建一个微服务客户端请求类,Hyperf 在底层帮我们实现了与 Consul 和服务提供者交互的细节,我们只要 `AdditionService` 类里的 `add` 方法即可远程调用 `microservice-1` 和 `microservice-2` 提供的服务。

至此,PHP 微服务集群搭建就完成了!

以上就是php如何搭建微服务的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行