RabbitMQ

Page content

Linux (CentOS) へのインストール

Erlangのインストール

epelが古いので公式サイトのレポジトリを追加してそこから入れます。

wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
yum -y install erlang

epelはdisableで。(disableにしなくても良いかもしれませんが……)

次に、RabbitMQのインストール。RPMで提供されているので最新のものをwgetしてきます。

wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.3/rabbitmq-server-3.6.3-1.noarch.rpm
yum localinstall rabbitmq-server-3.6.3-1.noarch.rpm

ちなみにこちらではepelにあるsocatが必要なのでenableにしておきます。

管理用プラグインを入れます。

(正直あまり役に立たなさそうですが、queueの溜まっていく様子が見えます)

rabbitmq-plugins enable rabbitmq_management
echo "[{rabbit, [{loopback_users, []}]}]." > /etc/rabbitmq/rabbitmq.config
↑これを入れないと外部からログインできない。

立ち上げ

service rabbitmq-server start
chkconfig rabbitmq-server on

ブラウザでアクセス

Hello worldは各言語揃ってます。

macへのインストール

インストール

  • brew update
  • brew install rabbitmq
  • /usr/local/sbinにパスが通っていること

管理用プラグイン

  • configが/usr/local/etc/rabbitmq/配下になることに注意
rabbitmq-plugins enable rabbitmq_management
echo "[{rabbit, [{loopback_users, []}]}]." > /usr/local/etc/rabbitmq/rabbitmq.config
↑これを入れないと外部からログインできない。

立ち上げ

CentOSと同じ

試してみる: hello worldというテキストをやり取りする

Python
  • pikaをインストール
yum -y install python-pip git-core
pip install pika=0.9.8
バージョンは参考サイトのまま。
  • 入れる方
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='flow')
channel.basic_publish(exchange='',
                        routing_key='flow',
                        body='Hello World!')
print "[x] Sent 'Hello World!'"
connection.close()
  • 読みだす方
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='flow')
def callback(ch, method, properties, body):
        print "[x] Received %r" % (body,)
channel.basic_consume(callback, queue='flow', no_ack=True)
channel.start_consuming()
ruby
  • bunnyを入れる

  • 送る方 (send.rb)

#!/usr/bin/env ruby
require "bunny"
conn = Bunny.new(:hostname => "127.0.0.1")
conn.start
ch = conn.create_channel
q = ch.queue("hello")
ch.default_exchange.publish("Hello World!", :routing_key => q.name)
puts " [x] Sent 'Hello world!'"
conn.close
  • 取り出す方 (receive.rb)
#!/usr/bin/env ruby
require "bunny"
require "pp"
conn = Bunny.new(:automatically_recover => false)
conn.start
ch = conn.create_channel
q = ch.queue("hello")
begin
    puts " [*] Waiting for message in #{q.name}. To exit press CTRL+C"
    q.subscribe(:block => true) do |delivery_info, properties, body|
      puts " [x] Received #{body}"
      pp delivery_info, properties, body
    end
rescue Interrupt => _
    conn.close
    exit(0)
end