RabbitMQのインストールとPHPによる基本的な使い方(macOS)

RabbitMQのインストール方法

Dockerを使用したインストール

Dockerがインストール済みの環境においては、以下のdocker-compose.ymlファイルを作成することでRabbitMQを簡単にセットアップできます。


version: '3'
services:
  rabbitmq:
    image: rabbitmq:3.7.7-management-alpine
    hostname: myrabbitmq
    ports:
      - "5672:5672"
      - "15672:15672"

作成後、以下のコマンドでコンテナを起動します。

docker-compose up -d rabbitmq

brewを使用したインストール

Homebrewを利用したインストールも可能です。

brew install rabbitmq

インストール後、サービスが起動していない場合は以下でサービスを開始してください。

brew services start rabbitmq

Web管理画面はhttp://127.0.0.1:15672にアクセスし、デフォルトのユーザ名・パスワードはguest/guestです。

PHP用AMQP拡張のインストール

RabbitMQと連携するためにはphp-amqp拡張が必要です。まず依存ライブラリをインストールします。

brew install rabbitmq-c

次にPECLから拡張をダウンロードして展開し、以下のようにビルドします。

curl 'http://pecl.php.net/get/amqp-1.9.3.tgz' -o amqp-1.9.3.tgz
phpize
./configure --with-php-config=/usr/local/Cellar/php@5.6/5.6.39/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/Cellar/rabbitmq-c/0.9.0
make && make install

作成された.soファイルをphp.iniに追加し、php-fpmnginxを再起動します。

PHPによるメッセージ送受信の実装

以下のcomposer.jsonで必要ライブラリをインストールします。


{
  "require": {
    "php-amqplib/php-amqplib": ">=2.6.1"
  }
}
composer install

メッセージ受信処理

以下のコードでメッセージを待ち受けます。


channel();

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

echo " [*] メッセージ受信待機中. 終了するにはCTRL+Cを押してください\n";

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

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

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

メッセージ送信処理

以下は10回のメッセージを送信するコードです。


channel();

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

for ($i = 0; $i < 10; $i++) {
    $messageBody = 'Hello World! 現在時刻: ' . date("H:i:s", time()) . " [" . $i . "]";
    $msg = new AMQPMessage($messageBody);
    $channel->basic_publish($msg, '', 'hello');
    echo $messageBody . "\n";
}

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

実行手順

  1. 受信側を先に実行:php receive.php
  2. 送信側を実行:php send.php

タグ: RabbitMQ PHP Docker AMQP メッセージキュー

5月15日 14:05 投稿