RabbitMQのメッセージ送信と受信(PHP版)

RabbitMQの基本概念

RabbitMQは、メッセージを受信し、転送する代理です。郵便局に例えると、RabbitMQはメールを受信し、保存し、受信者に転送する機能を担います。

以下はRabbitMQで使用されるいくつかの用語です:

  • Producer(送信者):メッセージを送信するプログラム。
  • Queue(キュー):RabbitMQ内部のメッセージを保存するバッファ。
  • Consumer(受信者):メッセージを受信し、処理するプログラム。

送信者、受信者、および代理は、同じホスト上に存在する必要ありません。実際には、多くのアプリケーションでは異なるホスト上に存在します。

環境構築

本チュートリアルでは、php-amqplibというPHPクライアントライブラリを使用します。Composerを使用して依存関係を管理します。

プロジェクトのルートディレクトリにcomposer.jsonファイルを作成します:

{
    "require": {
        "php-amqplib/php-amqplib": ">=2.9.0"
    }
}

Composerがインストールされている場合、以下のコマンドを実行します:

composer install

これにより、php-amqplibライブラリがインストールされます。

メッセージ送信

送信者プログラムsend.phpを作成します。

require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('test_queue', false, false, false, false);

$msg = new AMQPMessage('Hello RabbitMQ!');
$channel->basic_publish($msg, '', 'test_queue');

echo " [x] 送信完了 'Hello RabbitMQ!'\n";

$channel->close();
$connection->close();

このプログラムは、以下のことを行います:

  1. RabbitMQ代理に接続します。
  2. 送信用のキューtest_queueを宣言します。
  3. メッセージ'Hello RabbitMQ!'を作成し、キューに送信します。
  4. 接続を閉じます。

メッセージ受信

受信者プログラムreceive.phpを作成します。

require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;

$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

$channel->queue_declare('test_queue', false, false, false, false);

echo " [*] メッセージ受信待機中... Ctrl+Cで終了\n";

$callback = function ($msg) {
    echo ' [x] 受信:', $msg->body, "\n";
};

$channel->basic_consume('test_queue', '', false, true, false, false, $callback);

while ($channel->is_consuming()) {
    $channel->wait();
}

このプログラムは、以下のことを行います:

  1. RabbitMQ代理に接続します。
  2. 受信用のキューtest_queueを宣言します。
  3. キューからメッセージを受信し、受信した内容を表示します。
  4. Ctrl+Cで終了します。

実行方法

受信者プログラムを実行します:

php receive.php

送信者プログラムを別ターミナルで実行します:

php send.php

受信者プログラムは、送信者から送信されたメッセージを表示します。

キューの確認

以下のコマンドを使用して、RabbitMQ上のキュー状態を確認できます:

sudo rabbitmqctl list_queues

タグ: RabbitMQ PHP AMQP Message Queue

7月23日 16:37 投稿