読者です 読者をやめる 読者になる 読者になる

RabbitMQに これでもか ってくらいデータ入れてみる

RabbitMQ
はじめに

RabbitMQ 3.3.1に限界までデータ入れてみるとどうなるか試してみた。

結論

リミッターが効いて設定値以上はデータを受け付けなくなる。

リミッターを設定する

管理画面にアクセスする。
http://192.168.X.X:15672/

f:id:moyomot:20140519211032p:plain

Disk space項目の48 MB low watermarkがリミッターの設定値になる。
(low watermark = 干潮時の最低水位標)
この値を越えるとキューのデータがはけるまで、キューにデータが入らなくなる。

設定ファイルは

/etc/rabbitmq/rabbitmq.config

を使用する。
ただし、Ubuntuにインストールした時は、configファイルが存在していなかったので
バイナリのRabbitMQを別途ダウンロードして、その中の

/etc/rabbitmq/rabbitmq.config/rabbitmq.config.example

をリネームして利用した。

リミッターが48MBであるため、検証しやすい、でかい値に変更してみる。
変更箇所はdisk_free_limit

%% {disk_free_limit, 50000000},
   {disk_free_limit, 4500000000}

設定変更後、MQ再起動。

$ sudo rabbitmqctl stop
$ sudo rabbitmq-server start -detached

f:id:moyomot:20140519214458p:plain
問題なければ、low watermarkが変更される。

データ投入

MQへの接続にはBunnyを用いる。
参考サイトをもとに作成したサンプルプログラム。

require "rubygems"
require "bunny"

str = "abcdefghijklmnopqrstuvwxyz"

conn = Bunny.new("amqp://admin:password@192.168.X.X:5672")
conn.start

ch = conn.create_channel
q  = ch.queue("bunny.test.limit")
x  = ch.default_exchange


100000000.times do |i|
  x.publish(str, :routing_key => q.name)
  puts i if i % 1000 == 0
end
conn.close

プログラムを実行して、データ容量が設定値をオーバーすると、管理画面は次のようになる。
f:id:moyomot:20140519220010p:plain
Disk spaceが赤色表示されてるね。

まとめ

RabbitMQ 3.3.1に限界までデータ入れてみると、もうムリとデータを受け付けなくなる。
(うろ覚えだけど、旧バージョンはこのような仕組みなくて、MQ落ちてた気がするんだよね)