プログラミング ミドルウェア

RabbitMQチュートリアル Part1

更新日:

イントロダクション

RabbitMQはメッセージブローカー。
メッセージを受け入れて転送する。
郵便局に例えることができる。
メールをポストにいれたら、最終的にRabbitMQが宛先にメールを届けてくれる。
下記の用語(登場人物)がある。それぞれは同一ホストに存在する必要はない。

Producer

メッセージを送信する人

Queue

メッセージを格納する郵便箱のようなもの。
ここにProducerがメッセージを投げ入れて、Consumerがメッセージを取りに来る。

Consumer

メッセージを受信する人

HelloWorld

rubyで2つの簡単なプログラムを作成する。
Produerが1つのメッセージを送信して、Consumerがメッセージを受信して表示する。
PがProducerでCがConsumer、QがQueue

|P| -> |Q| -> |C|

Bunyインストール

Bunyを使うのでインストールしておく必要がある。

$ gem install bunny --version ">= 2.6.4"

送信側

ProducerはRabbitMQに接続して一つのメッセージを送信して終了する。

    Hello
|P| -> |  Q  |

最初にbunnyライブラリをrequireする

#!/usr/bin/env ruby
require 'bunny'

RabbitMQに接続する
コネクション接続を抽象化しプロトコルバージョンのネゴシエーション、認証などを行う。
下記の例は全てデフォルト設定でローカルマシンのブローカー(RabbitMQ)に接続する。

connection = Bunny.new
connection.start

異なるマシンのブローカー(RabbitMQ)に接続したければ、hostnameオプションを使う

connection = Bunny.new(hostname: 'rabbit.local')
connection.start

次にチャンネルを作成する。
API使用するのに必要な設定がされている。

channel = connection.create_channel

送信するキューを宣言して、キューにメッセージをパブリッシュする。
キューを宣言することは冪等であり、キューが存在しない場合のみ作成される
メッセージの内容はバイト配列なので、好きなものをエンコードすることができます。

queue = channel.queue('hello')

channel.default_exchange.publish('Hello World!', routing_key: queue.name)
puts " [x] Sent 'Hello World!'"

接続を閉じる

connection.close

send.rb

受信側

      Hello
| Q | -> |C|

send.rbと同じようにrequireする

#!/usr/bin/env ruby
require 'bunny'

設定はProducerと同じ。
コネクションとチェンネルを開き、コンシュームするキューを宣言する。

connection = Bunny.new
connection.start

channel = connection.create_channel
queue = channel.queue('hello')

キューからメッセージを受信する。

begin
  puts ' [*] Waiting for messages. To exit press CTRL+C'
  queue.subscribe(block: true) do |_delivery_info, _properties, body|
    puts " [x] Received #{body}"
  end
rescue Interrupt => _
  conn.close

  exit(0)
end

receive.rb

実行してみる

受信側で

$ bundle exec ruby receive.rb 
 [*] Waiting for messages. To exit press CTRL+C

送信側で

$ bundle exec ruby send.rb 
 [x] Sent 'Hello World!'

publish(send)後にconsume(receive)することを確認
receve側に下記のメッセージが出力される

 [x] Received Hello World!

queue 一覧

キュー一覧とメッセージ数の確認が下記のコマンドでできる

# rabbitmqctl list_queues

-プログラミング, ミドルウェア
-,

Copyright© 明日から頑張ります。 , 2025 All Rights Reserved Powered by STINGER.