Hyperf (推薦學(xué)習(xí):php視頻教程)
對于 JAVA 開發(fā)者來說,有技術(shù)相當(dāng)成熟的微服務(wù)框架可供選擇:
[Dubbo](https://dubbo.Apache.org/zh-cn/)
[Spring Cloud](https://www.springcloud.cc/)
作為一名 PHPer,我用 google 查了一下「PHP + 微服務(wù)」,發(fā)現(xiàn)有用的相關(guān)內(nèi)容少之又少 ,沒有什么實質(zhì)性的參考價值,無限惆悵。
幸好,有大神在基于 Swoole 擴展的基礎(chǔ)上,實現(xiàn)了高性能、高靈活性的 PHP 協(xié)程框架 [Hyperf](https://www.hyperf.io/) ,并提供了微服務(wù)架構(gòu)的相關(guān)組件。
Hyperf 是基于 `Swoole 4.3+` 實現(xiàn)的高性能、高靈活性的 PHP 協(xié)程框架,內(nèi)置協(xié)程服務(wù)器及大量常用的組件,性能較傳統(tǒng)基于 `PHP-FPM` 的框架有質(zhì)的提升,提供超高性能的同時,也保持著極其靈活的可擴展性,標(biāo)準(zhǔn)組件均基于 [PSR 標(biāo)準(zhǔn)](https://www.php-fig.org/psr) 實現(xiàn),基于強大的依賴注入設(shè)計,保證了絕大部分組件或類都是 `可替換` 與 `可復(fù)用` 的。
于是,我在學(xué)習(xí)了微服務(wù)架構(gòu)相關(guān)的基礎(chǔ)知識之后,使用 Hyperf 框架構(gòu)建了一個基于 PHP 的微服務(wù)集群,這是項目源碼地址:
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
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
這里啟動了一個 Consul 容器 `consul-server-leader` 作為服務(wù)注冊和服務(wù)發(fā)現(xiàn)的組件,容器 `microservice-1` 和 `microservice-2` 分別提供了加法運算和除法運算的服務(wù)。
容器 `app` 作為服務(wù)調(diào)用方,配置了 `consul-server-leader` 容器的 URL,通過訪問 `consul-server-leader` 獲取 `microservice-1` 和 `microservice-2` 服務(wù)的 IP 地址和端口,然后 `app` 通過 RPC 協(xié)議調(diào)用加法運算和除法運算的服務(wù)獲取結(jié)果并返回給用戶。
`app` 容器為 Web 應(yīng)用,部署了一個 Hyperf 項目并對外提供 HTTP 服務(wù)。
例如,在 `AppControllerIndexController` 控制器里有 `add` 方法:
publicfunctionadd(AdditionService $addition)
{
$a = (int) $this->request->input( 'a', 1); # 接受前端用戶參數(shù)
$b = (int) $this->request->input( 'b', 2);
return[
'a'=> $a,
'b'=> $b,
'add'=> $addition->add($a, $b) # RPC調(diào)用
];
}
在 `AppJsonRpcAdditionService` 中 `add` 的實現(xiàn):
classAdditionServiceextendsAbstractServiceClient
{
/**
* 定義對應(yīng)服務(wù)提供者的服務(wù)名稱
* @varstring
*/
protected$serviceName = 'AdditionService';
/**
* 定義對應(yīng)服務(wù)提供者的服務(wù)協(xié)議
* @varstring
*/
protected$protocol = 'jsonrpc-http';
publicfunctionadd(int $a, int $b): int
{
return$this->__request( __FUNCTION__, compact( 'a', 'b'));
}
}
繼承了 `AbstractServiceClient` 即可創(chuàng)建一個微服務(wù)客戶端請求類,Hyperf 在底層幫我們實現(xiàn)了與 Consul 和服務(wù)提供者交互的細(xì)節(jié),我們只要 `AdditionService` 類里的 `add` 方法即可遠(yuǎn)程調(diào)用 `microservice-1` 和 `microservice-2` 提供的服務(wù)。
至此,PHP 微服務(wù)集群搭建就完成了!
以上就是php如何搭建微服務(wù)的詳細(xì)內(nèi)容,更多請關(guān)注其它相關(guān)文章!