[memo] Ubuntu18.04でRabbitMQを動かしPHPを使ってハロワしてみた
RabbitMQ + PHPの公式チュートリアル
PHPを使ったプロジェクトでRabbitMQを使ってみようと思ったので、とりあえずハローワールドやってみたメモ。
ubuntu 18.04に必要なものをインストール
# apt install rabbitmq-server php php-cli php-bcmath php-mbstring
# curl -sS https://getcomposer.org/installer | php
# mv composer.phar /usr/local/bin/composer
プロジェクトにphp-amqplibをインストール
今回は、プロジェクトディレクトリをrabbitmq_learnとして、その中にcomposer.jsonを作成しphp-ampqlibをインストールする。
# mkdir rabbitmq_learn
# cd rabbitmq_learn
cat < EOT > composer.json
{
"require": {
"php-amqplib/php-amqplib": ">=2.6.1"
}
}
EOT
# composer install
PHPからメッセージを送ってみる
送信
send.php
<?php
// file: 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();
// helloという名前のqueueを宣言
$channel->queue_declare('hello', false, false, false, false);
// メッセージを作成
$msg = new AMQPMessage('Hello World!');
// helloというqueueに作成したメッセージを送信
$channel->basic_publish($msg, '', 'hello');
echo "[x] Sent 'Hello World!'\n";
// コネクションを閉じる
$channel->close();
$connection->close();
受信
recv.php
<?php
// file: recv.php
require_once __DIR__'/vendor/autoload.php';
use PhpAmqpLib\Connection\AMQPStreamConnection;
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();
$channel->queue_declare('hello', false, false, false, false);
echo "[*] Waiting for messages. To exit press CTRL+C\n";
// メッセージを受信したときに実行するコールバック関数
$callback = function($msg){
echo '[x] Received ', $msg->body, "\n";
};
$channel->basic_consume('hello', '', false, true, false, false, $callback);
// メッセージを受信するとコールバック関数が呼ばれる
while(count($channel->callbacks)){
$channel->wait();
}
実行と確認
rabbitmqctlというコマンドでRabbitMQサーバの管理を行える。
# rabbitmqctl list_queues
Listing queues
まだqueueが作られていないことが分かる。
作成したファイルを実行するとqueueが作成される。
# php recv.php
[*] Waiting for messages. To exit press CTRL+C
# rabbitmqctl list_queues
Listing queues
hello 0
別のターミナルからsend.phpを実行する。
# php send.php
[x] Sent 'Hello World!'
すると、recv.phpでメッセージを受信できる。
[x] Received Hello World!