PHP
RabbitMQ

[memo] Ubuntu18.04でRabbitMQを動かしPHPを使ってハロワしてみた


[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!