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
ブラウザでアクセス
- http://your.local.domain:15672
- ID: guest
- PW: guest
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