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();
このプログラムは、以下のことを行います:
- RabbitMQ代理に接続します。
- 送信用のキュー
test_queueを宣言します。 - メッセージ
'Hello RabbitMQ!'を作成し、キューに送信します。 - 接続を閉じます。
メッセージ受信
受信者プログラム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();
}
このプログラムは、以下のことを行います:
- RabbitMQ代理に接続します。
- 受信用のキュー
test_queueを宣言します。 - キューからメッセージを受信し、受信した内容を表示します。
- Ctrl+Cで終了します。
実行方法
受信者プログラムを実行します:
php receive.php
送信者プログラムを別ターミナルで実行します:
php send.php
受信者プログラムは、送信者から送信されたメッセージを表示します。
キューの確認
以下のコマンドを使用して、RabbitMQ上のキュー状態を確認できます:
sudo rabbitmqctl list_queues
7月23日 16:37 投稿