php如何搭建微服务器配置,php如何搭建微服务

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

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

[Dubbo](https://dubbo.Apache.org/zh-cn/)

[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 的微服务集群,这是项目源码地址:

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

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

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

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

这里启动了一个 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` 方法:

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'));

}

}

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值