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

Ref:
http://rubybunny.info/articles/queues.html