RabbitMQに これでもか ってくらいデータ入れてみる
はじめに
RabbitMQ 3.3.1に限界までデータ入れてみるとどうなるか試してみた。
結論
リミッターが効いて設定値以上はデータを受け付けなくなる。
リミッターを設定する
管理画面にアクセスする。
http://192.168.X.X:15672/
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
問題なければ、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
プログラムを実行して、データ容量が設定値をオーバーすると、管理画面は次のようになる。
Disk spaceが赤色表示されてるね。
まとめ
RabbitMQ 3.3.1に限界までデータ入れてみると、もうムリとデータを受け付けなくなる。
(うろ覚えだけど、旧バージョンはこのような仕組みなくて、MQ落ちてた気がするんだよね)