LoginSignup
5
6

More than 5 years have passed since last update.

bunnyを使ってRabbitMQのキューを操作する

Posted at

使用するバージョン

  • 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 落ちてもキュー+メッセージが残るようにするには、durablepersistentを指定する

# -*- 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
5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6