2015年2月28日土曜日

RabbitMQのプラグインを開発するための環境を準備してみた

概要

RabbitMQプラグインを開発するための環境構築をしてみました
実際にRabbtMQプラグインを開発するためにはerlangのコードが書けないとダメです
自分は書けないので環境を構築するまでの手順を紹介します

環境

  • CentOS 6.6 64bit (Final)
  • RabbitMQ 3.4.4
    RabbitMQ自体のインストールは今回は紹介しません
    インストール方法に関してはこちらで紹介しているので参照してみてください

環境構築

基本はコマンドベース構築していきます

必要なパッケージのインストール

作成するプラグインをビルドするために必要なパッケージをインストールしておきます

yum -y install libxslt gcc

Umbrellaのインストール

UmbrellaとはRabbitMQのプラグインを管理している仕組みです
サンプル開発用のプラグインも含めRabbitMQの安定版として動作しているプラグインのソースもインストールすることができます

git clone https://github.com/rabbitmq/rabbitmq-public-umbrella.git
cd rabbitmq-public-umbrella/
make co

make coするとRabbitMQのプラグインを次々とダウンロードしてきてくれます
結構な数があるのですべてのプラグインのダウンロードが完了するまで待ちます
ダウンロードが完了しmakeが問題なく終了すればUmbrellaのインストールは完了です

長いですが、完了後は以下のような感じでプラグインのフォルダが存在していればOKです

-rw-r--r--  1 root root   955  2月 24 19:58 2015 README-packaging
-rw-r--r--  1 root root  5505  2月 24 19:58 2015 Makefile
-rw-r--r--  1 root root 24897  2月 24 19:58 2015 LICENSE
-rw-r--r--  1 root root  2666  2月 24 19:58 2015 generate_deps
-rw-r--r--  1 root root   622  2月 24 19:58 2015 generate_app
-rwxr-xr-x  1 root root   142  2月 24 19:58 2015 foreachrepo
-rw-r--r--  1 root root 22541  2月 24 19:58 2015 do-package.mk
-rw-r--r--  1 root root  4461  2月 24 19:58 2015 common.mk
-rwxr-xr-x  1 root root  3206  2月 24 19:58 2015 check_xref
-rw-r--r--  1 root root   448  2月 24 19:58 2015 all-packages.mk
-rw-r--r--  1 root root   337  2月 24 19:58 2015 README.md
-rw-r--r--  1 root root 19770  2月 24 19:58 2015 README.makefiles
drwxr-xr-x  5 root root  4096  2月 24 19:58 2015 rabbitmq-docs
drwxr-xr-x  3 root root  4096  2月 24 19:58 2015 util
-rw-r--r--  1 root root  1368  2月 24 19:58 2015 umbrella.mk
-rw-r--r--  1 root root 11268  2月 24 19:58 2015 release.mk
drwxr-xr-x  2 root root  4096  2月 24 19:58 2015 release-build
drwxr-xr-x  9 root root  4096  2月 24 19:59 2015 rabbitmq-java-client
drwxr-xr-x  7 root root  4096  2月 24 20:00 2015 rabbitmq-dotnet-client
drwxr-xr-x  6 root root  4096  2月 24 20:00 2015 rabbitmq-test
drwxr-xr-x  3 root root  4096  2月 24 20:00 2015 cowboy-wrapper
drwxr-xr-x  3 root root  4096  2月 24 20:00 2015 eldap-wrapper
drwxr-xr-x  3 root root  4096  2月 24 20:00 2015 mochiweb-wrapper
drwxr-xr-x  7 root root  4096  2月 24 20:00 2015 rabbitmq-amqp1.0
drwxr-xr-x  7 root root  4096  2月 24 20:00 2015 rabbitmq-auth-backend-ldap
drwxr-xr-x  4 root root  4096  2月 24 20:00 2015 rabbitmq-auth-mechanism-ssl
drwxr-xr-x  5 root root  4096  2月 24 20:00 2015 rabbitmq-consistent-hash-exchange
drwxr-xr-x  7 root root  4096  2月 24 20:00 2015 rabbitmq-federation
drwxr-xr-x  5 root root  4096  2月 24 20:00 2015 rabbitmq-federation-management
drwxr-xr-x  9 root root  4096  2月 24 20:00 2015 rabbitmq-management
drwxr-xr-x  4 root root  4096  2月 24 20:00 2015 rabbitmq-management-agent
drwxr-xr-x  5 root root  4096  2月 24 20:00 2015 rabbitmq-management-visualiser
drwxr-xr-x  5 root root  4096  2月 24 20:01 2015 rabbitmq-web-dispatch
drwxr-xr-x  6 root root  4096  2月 24 20:01 2015 rabbitmq-mqtt
drwxr-xr-x  6 root root  4096  2月 24 20:01 2015 rabbitmq-shovel
drwxr-xr-x  7 root root  4096  2月 24 20:01 2015 rabbitmq-shovel-management
drwxr-xr-x  8 root root  4096  2月 24 20:01 2015 rabbitmq-stomp
drwxr-xr-x  4 root root  4096  2月 24 20:01 2015 rabbitmq-toke
drwxr-xr-x  6 root root  4096  2月 24 20:01 2015 rabbitmq-tracing
drwxr-xr-x  5 root root  4096  2月 24 20:01 2015 rabbitmq-web-stomp
drwxr-xr-x  5 root root  4096  2月 24 20:01 2015 rabbitmq-web-stomp-examples
drwxr-xr-x  3 root root  4096  2月 24 20:01 2015 sockjs-erlang-wrapper
drwxr-xr-x  6 root root  4096  2月 24 20:01 2015 toke
drwxr-xr-x  3 root root  4096  2月 24 20:01 2015 webmachine-wrapper
drwxr-xr-x  4 root root  4096  2月 24 20:09 2015 coverage
drwxr-xr-x  3 root root  4096  2月 24 20:09 2015 rabbitmq-codegen
drwxr-xr-x 11 root root  4096  2月 24 20:15 2015 rabbitmq-server
drwxr-xr-x  9 root root  4096  2月 24 20:15 2015 rabbitmq-erlang-client
drwxr-xr-x  8 root root  4096  2月 24 20:15 2015 rabbitmq-metronome

サンプルプラグインをビルドしてみる

ダウンロードしたプラグインの中にrabbitmq-metronomeというフォルダがあり、これがサンプル用のプラグインになります
これをビルドして実際にRabbitMQ本体に追加するところまでやってみたいと思います

まずはビルドしてみます

cd rabbitmq-metronome
make

するとダーっとログが流れてビルドがはじまります
結構時間がかかるので失敗しないように祈りながら待ちます

ビルドが完了したら成果物である.ezファイルをRabbitMQ本体にインストールしてプラグインを有効にします

cp dist/rabbitmq_metronome-0.0.0.ez /usr/lib/rabbitmq/lib/rabbitmq_server-3.4.4/plugins/
rabbitmq-plugins list
rabbitmq-plugins enable rabbitmq_metronome

.ezファイルを本体にpluginsフォルダに移動するだけでOKです
そのあとはrabbitmq-pluginsコマンドを使ってプラグインを有効にするだけです
listしてみると分かりますが、移動したezファイルのプラグインが一覧に出てくることがわかると思います

動作を確認してみる

サンプルのrabbitmq-metronomeプラグインはConnectionとChannelをExchangeを1つずつ生成してMessageRate 1.0 req/sec でメッセージを送信してくれるプラグインのようです
管理UIにアクセスしてConnectionsタブを見てみましょう
connections.png
こんな感じで常に接続されているConnectionsが確認できればプラグインがうまく動作していることになります

最後に

このままrabbitmq-metronomeプラグインを修正したい場合はrabbitmq-metronome/src配下の.erlファイルや.srcファイルを修正しmakeしてezファイルを作成してから、pluginsファルダに移動してという流れを繰り返せばOKです
参考サイトに記載した公式をみるとrabbit_metronome_worker.erlがコアの部分を実装しているのでここを修正しましょう的なことが書いてありました
が、ボクは試していないので最中ではないです

erlangが書けて読める人だったらこっからちょろっとプラグインを作ってしまうのだろうか
時間があったらやってみよう

参考サイト

0 件のコメント:

コメントを投稿