ホームページ >バックエンド開発 >PHPの問題 >PHPでマイクロサービスを構築する方法

PHPでマイクロサービスを構築する方法

(*-*)浩
(*-*)浩オリジナル
2019-09-30 14:49:584439ブラウズ

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
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` が開始されますサービス登録およびサービスとして 検出されたコンポーネント、コンテナー「microservice-1」および「microservice-2」は、それぞれ加算操作と除算操作のサービスを提供します。

コンテナ `app` はサービス呼び出し元として、`consul-server-leader` コンテナの URL を設定し、`consul-server-leader` コンテナにアクセスして `microservice-1` および `microservice-2` サービスを取得します。 server-leader` の IP アドレスとポート、そして `app` は RPC プロトコルを通じて加算サービスと除算サービスを呼び出し、結果を取得してユーザーに返します。

「app」コンテナは、Hyperf プロジェクトをデプロイし、外部に HTTP サービスを提供する Web アプリケーションです。

たとえば、`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 およびサービス プロバイダーとの対話の詳細を最下位レベルで実装します。必要なのは、`microservice-1` および `microservice-2` によって提供されるサービスをリモートで呼び出すための `AdditionService` クラスの `add` メソッドだけです。

これで、PHP マイクロサービス クラスターの構築が完了しました。

以上がPHPでマイクロサービスを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。