RabbitMQ
GCEに構築
https://qiita.com/NagaokaKenichi/items/7b5e4a928fde8077d49f
環境構築
公式のイメージを使う。
- https://hub.docker.com/_/rabbitmq/
イメージは、サーバーだけでいいならrabbitmq:3
を。管理コンソールも使いたいならrabbitmq:3-management
を使う。
docker run -itd --rm --hostname rabbitmq --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
localhost:5672
でrabbitMQに接続でき、localhost:15672
で管理コンソールに接続できる。
管理コンソールのデフォルトはuser=guest, password=guest。
デバッグ
キュー送信
rabbitmqadmin publish exchange=my.exchange routing_key=my.key payload="{\"id\": 1, \"text\": \"hello\"}"
jsonファイルを読み込んで送信。
rabbitmqadmin publish exchange=my.exchange routing_key=my.key payload="$(cat testQueue.json)"
キュー取得
rabbitmqadmin get queue=[queuename]
command
Queue
すべて表示
rabbitmqadmin -f tsv -q list queues name
すべて削除
rabbitmqadmin -f tsv -q list queues name | tr -d '\r' | while read line; do rabbitmqadmin delete queue name="$line"; done
Exchange
すべて表示
rabbitmqadmin -f tsv -q list exchanges name
すべて削除
rabbitmqadmin -f tsv -q list exchanges name | tr -d '\r' | while read line; do rabbitmqadmin delete exchange name="$line"; done
rabbitmqadmin -f tsv -q list queues name | tr -d '\r' | while read line; do rabbitmqadmin delete queue name="$line"; done;
rabbitmqadmin -f tsv -q list exchanges name | tr -d '\r' | while read line; do rabbitmqadmin delete exchange name="$line"; done
SDK(?)
Ruby
Bunny
を使う。
https://github.com/ruby-amqp/bunny
Gemfile
source 'https://rubygems.org'
gem 'bunny', '>= 2.9.2'
bundle install --path vendor/bundle
サンプルコード
main.rb
require 'bunny'
# `to_json`に必要
require 'json'
config = {
host: 'localhost',
port: '5672',
user: 'guest',
password: 'guest',
vhost: '/'
}
begin
connection = Bunny.new(config)
connection.start
rescue Bunny::TCPConnectionFailed => e
print 'TCP connection failed...'
sleep 5
connection = Bunny.new(config)
connection.start
end
# Channelを作る
channel = connection.create_channel
# Exchangeを作る
in_exchange = channel.topic('hoge.in.exchange', durable: true)
out_exchange = channel.topic('hoge.out.exchange', durable: true)
# Queueを作る
queue = channel.queue('hoge.queue', exclusive: true)
# QueueとExchangeをバインドする
# `#`はどのルーティングキーで来ても受信するという意味
queue.bind(out_exchange, routing_key: '#')
# キュー送信
payload = {
"hoge" => [
1,
2,
3
],
"fuga" => 1
}.to_json
in_exchange.publish(payload,
routing_key: '#',
content_type: 'application/json')
# キュー受信(プル型)
delivery_info, metadata, payload = queue.pop
# キューのメッセージ削除
queue.purge
# 後始末
connection.close