LoginSignup
1
2

More than 5 years have passed since last update.

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

Posted at

[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!
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2