このエントリはMagento Advent Calendar 2019の7日目です。

今回は前回紹介した「非同期・バルク処理API」を使うための準備について解説します。

RabbitMQをセットアップしよう

非同期・バルク処理APIを使用するためには、RabbitMQのセットアップが必要です。
RabbitMQはAdvanced Massage Queuing Protocol (AMQP)を使用したオープンソースのメッセージキューを扱うためのソフトウエアです。

LinuxディストリビューションによってRabbitMQのインストール方法は若干変わりますが、比較的新しいバージョンであればパッケージが用意されているため、簡単にインストールできます。

Ubuntu Linux 18.04 LTSの場合

Ubuntu Linux 18.04 LTSの場合、下記のコマンドだけでインストールできます。

apt install rabbitmq-server

CentOS 7の場合

CentOS 7の場合、RabbitMQがベースにしているErlangのインストールも必要です。

wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm

Erlangがインストールできたら、RabbitMQをインストールします。

rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
yum install rabbitmq-server-3.5.6-1.noarch.rpm

無事にRabbitMQがインストールできたら、プロセスが起動していることを確認しておきましょう。

次に、RabbitMQのGUIをインストールしておきます。コマンドからでも操作はできますが、GUIがあるほうが視覚的に状況を確認しやすいと思います。

RabbitMQのGUIはプラグインの形で配布されています。Linuxディストリビューションによっては一緒にインストールしてくれるかもしれませんが、入っていない場合は下記のコマンドでインストールします。

rabbitmq-plugins enable rabbitmq_management

インストールできたら、 http://ホスト名:15672/ にアクセスして、RabbitMQのGUIがブラウザで見られることを確認しておきましょう。
次のような画面が表示されれば成功です。

RabbitMQ

管理者ユーザーの作成

最近のRabbitMQはインストール直後の状態では、セキュリティ上の理由からGUIへのアクセスが制限されています。
クライアントPCからアクセスができるように、以下のコマンドで管理ユーザーを作成しましょう。

  1. rabbitmqctl add_user ユーザー名 パスワード
  2. rabbitmqctl set_user_tags ユーザー名 administrator
  3. rabbitmqctl set_permissions -p / ユーザー名 ".*" ".*" ".*”

本当は3番めのコマンドでアクセスできるIPやネットワークを制限するべきなのですが、今回は省略します。

管理ユーザーを作成したら、RabbitMQにログインします。
次のようにログインできれば成功です。

RabbitMQ管理画面

Magento側の設定

続いてMagento側の設定を調整します。
RabbitMQへの接続設定はapp/etc/env.phpに記述する事になっているので、エディタでこのファイルを開き、以下の内容を追記します。

'queue' => [
        'amqp' => [
            'host' => ‘RabbitMQサーバーのホスト名 or IP',
            'port' => '5672',
            'user' => ‘RabbitMQのユーザー名',
            'password' => 'RabbitMQのユーザーパスワード',
            'virtualhost' => '/'
        ]
    ]

ファイルを保存したら、Magentoのキャッシュをクリアしておきます。

Cronジョブを実行して、MagentoとRabbitMQを接続する

最後にCronジョブを実行し、MagentoとRabbitMQが接続できるようにします。
すでにCronジョブの設定ができている場合は、しばらく待っているとプロセスが起動してきます。psコマンドで起動中のプロセスを表示させて、以下のようなプロセスが起動していれば成功です。

php /path/to/magento/bin/magento queue:consumers:stat (以下略)

というプロセスが起動していれば成功です。
あとはMagentoがRabbitMQに登録されているキューを自動的に拾い上げて実行してくれるようになります。

次回は実際に非同期・バルク処理APIを実行し、どういう結果が得られるかを解説します。