使用するバージョン
- RabbitMQ 3.5.0
- bunny 2.3.0
条件
- vhostは
/production
- ユーザは
user1
、パスワードはpass
とする
キューにメッセージを追加する(基本)
# -*- coding: utf-8 -*-
require "bunny"
# RabbitMQに接続
conn = Bunny.new(:host => "localhost", :vhost => "/production", :user => "user1", :pass => "pass")
conn.start
# channelを作成
ch = conn.create_channel
# queue1というキューを作成
# キューが無い場合は作成(既にある場合もエラーにはならない)
q = ch.queue("queue1")
# queue1にメッセージを追加
q.publish("Hello, world!")
# close
conn.stop
キューを確認すると登録されている
$ sudo /usr/sbin/rabbitmqctl list_queues -p /production
Listing queues ...
queue1 1
ただし、このやり方だとRabbitMQサーバーが再起動 or 落ちた場合、キュー+メッセージは消えてしまう
キューにメッセージを追加する(メッセージを永続)
RabbitMQサーバーが再起動 or 落ちてもキュー+メッセージが残るようにするには、durable
とpersistent
を指定する
# -*- coding: utf-8 -*-
require "bunny"
# RabbitMQに接続
conn = Bunny.new(:host => "localhost", :vhost => "/production", :user => "user1", :pass => "pass")
conn.start
# channelを作成
ch = conn.create_channel
# queue1というキューを作成
# :durable => trueとすることで、再起動してもキューは残る
q = ch.queue("queue1", :durable => true)
# queue1にメッセージを追加
# :persistent => trueとすることで、再起動してもメッセージは残る
q.publish("Hello, world!", :persistent => true)
# close
conn.stop
キューからメッセージを取得(subscribe)
# -*- coding: utf-8 -*-
require "bunny"
# RabbitMQに接続
conn = Bunny.new(:host => "localhost", :vhost => "/production", :user => "user1", :pass => "pass")
conn.start
# channelを作成
ch = conn.create_channel
# queue1というキューを作成
q = ch.queue("queue1", :durable => true)
# メッセージを取得
# 取得するとキューからメッセージは削除される
q.subscribe do |delivery_info, properties, msg|
p "queue = #{q.name}" #=> "queue = queue1"
p "message= #{msg}" #=> "message= Hello, world!"
end
# close
conn.stop