RabbitMQ の導入

#Rabbit MQの導入
RabbitMQを導入して非同期キューのテストでもしてみようと思い立ち、導入してみた。

##前提条件
前提条件にErlangが必要なので、そこから。

### ErlangのRPM取得

```
wget "http://packages.erlang-solutions.com/site/esl/esl-erlang/FLAVOUR_1_general/esl-erlang_15.b.3-1~fedora~beefymiracle_amd64.rpm"
wget "https://github.com/jasonmcintosh/esl-erlang-compat/blob/master/rpmbuild/RPMS/noarch/esl-erlang-compat-R14B-1.el6.noarch.rpm?raw=true"
```

これをyum で導入し、Erlangは終了。


```
 yum install esl-erlang_15.b.3-1~fedora~beefymiracle_amd64.rpm
 yum install esl-erlang-compat-R14B-1.el6.noarch.rpm
```

### RabbitMQ の導入

```
yum install http://www.rabbitmq.com/releases/rabbitmq-server/v3.3.4/rabbitmq-server-3.3.4-1.noarch.rpm
```

## RabbitMQ の設定

### ひな型のコピー
よくあるパターンとして、ひな型があるのでまずコピーして設定していく。

```
cp -a /usr/share/doc/rabbitmq-server-3.3.4/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
```

運用時にはレベルを変えたいかもしれないので、以下の内容をチェック。
```
{log_levels, [{connection, info}]},
```
はログを表していて、infoがレベル（none/error/warning/info）を表している。

ログは、/var/log/rabbitmqにある。

## 動作確認
JavaのClientツールを導入し、テストツールで動作確認をおこなう。

```
wget "http://www.rabbitmq.com/releases/rabbitmq-java-client/v3.3.4/rabbitmq-java-client-bin-3.3.4.tar.gz"
tar zxf rabbitmq-java-client-bin-3.3.4.tar.gz
```

解凍したフォルダで、PerfTestを実行して確認。

```
./runjava.sh com.rabbitmq.examples.PerfTest
starting consumer #0
starting producer #0
time: 1.001s, sent: 4874 msg/s, received: 3028 msg/s, min/avg/max latency: 3132/81769/204803 microseconds
time: 2.001s, sent: 17897 msg/s, received: 6538 msg/s, min/avg/max latency: 216676/503751/640297 microseconds
time: 3.001s, sent: 10706 msg/s, received: 10953 msg/s, min/avg/max latency: 494052/926855/1224386 microseconds
```

な感じになっていればQueueは動作している。
--helpで呼び出すことで、以下のようなヘルプが得られる。

```
 -?,--help                  show usage
 -A,--multiAckEvery <arg>   multi ack every
 -a,--autoack               auto ack
 -b,--heartbeat <arg>       heartbeat interval
 -c,--confirm <arg>         max unconfirmed publishes
 -C,--pmessages <arg>       producer message count
 -D,--cmessages <arg>       consumer message count
 -e,--exchange <arg>        exchange name
 -f,--flag <arg>            message flag
 -h,--uri <arg>             AMQP URI
 -i,--interval <arg>        sampling interval
 -k,--routingKey <arg>      routing key
 -M,--framemax <arg>        frame max
 -m,--ptxsize <arg>         producer tx size
 -n,--ctxsize <arg>         consumer tx size
 -p,--predeclared           allow use of predeclared objects
 -Q,--globalQos <arg>       channel prefetch count
 -q,--qos <arg>             consumer prefetch count
 -r,--rate <arg>            rate limit
 -s,--size <arg>            message size
 -t,--type <arg>            exchange type
 -u,--queue <arg>           queue name
 -x,--producers <arg>       producer count
 -y,--consumers <arg>       consumer count
 -z,--time <arg>            time limit
```

# Webでの管理ツール

```
/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_shovel
/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management
/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_shovel_management
/etc/init.d/rabbitmq-server restart
```
管理ツールを有効にします。

```
rabbitmqctl -n rabbit@localhost add_user admin admin
rabbitmqctl -n rabbit@localhost set_permissions admin ".*" ".*" ".*"
rabbitmqctl -n rabbit@localhost set_user_tags admin administrator
```

上記コマンドでユーザを登録（admin/admin）にして、以下のURLでアクセス可能になります。

http://hostname:15672/

![WS000058.JPG](https://qiita-image-store.s3.amazonaws.com/0/41582/c36148be-b478-9732-9171-1e70f35b2c46.jpeg)