ホームページ > バックエンド開発 > PHPチュートリアル > PHP マイクロサービスを使用して分散メッセージ通信とプッシュを実装する方法

PHP マイクロサービスを使用して分散メッセージ通信とプッシュを実装する方法

WBOY
リリース: 2023-09-24 18:02:02
オリジナル
1072 人が閲覧しました

PHP マイクロサービスを使用して分散メッセージ通信とプッシュを実装する方法

PHP マイクロサービスを使用して分散メッセージ通信とプッシュを実装する方法

インターネットの発展に伴い、分散アーキテクチャは現代のソフトウェア開発における重要なトレンドになりました。分散アーキテクチャでは、マイクロサービスは、大規模なアプリケーションを複数の小さな自律的なサービス ユニットに分割する一般的なアーキテクチャ パターンです。コラボレーションと対話は、これらのマイクロサービス間のメッセージ通信を通じて実現されます。

この記事では、PHP マイクロサービスを使用して分散メッセージ通信とプッシュを実装する方法を紹介し、具体的なコード例を示します。

  1. プロジェクトの初期化

まず、新しい PHP プロジェクトを作成します。私たちのプロジェクトが「メッセージサービス」と呼ばれるものだとしましょう。コマンド ラインで次のコマンドを実行します。

mkdir message-service
cd message-service
composer init
ログイン後にコピー

コマンド ライン プロンプトに従ってプロジェクト情報を入力し、生成された composer.json に次の内容を追加します。

{
    "require": {
        "enqueue/enqueue": "^0.9.18",
        "enqueue/elasticsearch": "^0.9.7",
        "enqueue/mongodb": "^0.9.16",
        "enqueue/redis": "^0.9.19",
        "enqueue/stomp": "^0.9.16",
        "enqueue/zmq": "^0.9.13",
        "enqueue/gearman": "^0.9.11"
    },
    "autoload": {
        "psr-4": {
            "MessageService\": "src/"
        }
    }
}
ログイン後にコピー

次に実行します。 次のコマンドを実行すると、必要な依存ライブラリがインストールされます。

composer install
ログイン後にコピー
  1. メッセージ ミドルウェアの構成

分散システムでは、メッセージ ミドルウェアが重要な役割を果たし、責任を負います。メッセージングとマイクロサービス間の通信を処理します。 RabbitMQ、Kafka などのさまざまなメッセージ ミドルウェアを選択できます。ここでは、RabbitMQ を例として取り上げます。

message-service のルート ディレクトリに config という名前のディレクトリを作成し、このディレクトリに rabbitmq.php ファイルを作成します。ファイルに次のコードを追加します。

<?php

return [
    'connections' => [
        'default' => [
            'host' => 'localhost',
            'port' => 5672,
            'user' => 'guest',
            'pass' => 'guest',
            'vhost' => '/',
        ],
    ],
];
ログイン後にコピー
  1. Create messageProducer

次のコードを含む Producer.php という名前のファイルを作成します。 ##

<?php

namespace MessageService;

use EnqueueAmqpLibAmqpConnectionFactory;
use EnqueueMessagesValidatorTrait;
use InteropAmqpAmqpContext;
use InteropAmqpAmqpMessage;

class Producer
{
    use MessagesValidatorTrait;

    private $context;

    public function __construct()
    {
        $config = include 'config/rabbitmq.php';

        $connectionFactory = new AmqpConnectionFactory($config['connections']['default']);
        $this->context = $connectionFactory->createContext();
    }

    public function publish(string $message): void
    {
        $this->assertMessageValid($message);

        $message = $this->context->createMessage($message);
        $this->context->createProducer()->send($message);
        echo 'Message published: ' . $message->getBody() . PHP_EOL;
    }
}
ログイン後にコピー

    メッセージ コンシューマーの作成
次のコードを含む

Consumer.php という名前のファイルを作成します:

<?php

namespace MessageService;

use EnqueueAmqpLibAmqpConnectionFactory;
use InteropAmqpAmqpContext;
use InteropAmqpAmqpMessage;

class Consumer
{
    private $context;

    public function __construct()
    {
        $config = include 'config/rabbitmq.php';

        $connectionFactory = new AmqpConnectionFactory($config['connections']['default']);
        $this->context = $connectionFactory->createContext();
    }

    public function consume(): void
    {
        $this->context->declareQueue($this->context->createQueue('message_queue'));

        $consumer = $this->context->createConsumer($this->context->createQueue('message_queue'));

        while (true) {
            if ($message = $consumer->receive(3000)) {
                echo 'Received message: ' . $message->getBody() . PHP_EOL;
                $consumer->acknowledge($message);
            }
        }
    }
}
ログイン後にコピー

    メッセージ プロデューサとコンシューマの使用

index.php ファイルでは、プロデューサとコンシューマを使用してメッセージを送受信できます。コードは次のとおりです。

<?php

require __DIR__ . '/vendor/autoload.php';

use MessageServiceProducer;
use MessageServiceConsumer;

$producer = new Producer();
$producer->publish('Hello, World!');

$consumer = new Consumer();
$consumer->consume();
ログイン後にコピー

index.php スクリプトを実行すると、テストに使用されるメッセージが送受信されていることがわかります。

これまで、PHP ベースのマイクロサービス分散メッセージ通信とプッシュを実装してきました。このアーキテクチャを拡張およびカスタマイズして、ビジネス ニーズに応じてより複雑な機能を実現できます。

以上がPHP マイクロサービスを使用して分散メッセージ通信とプッシュを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート