2015年4月15日水曜日

RabbitMQ - 基本を学ぶ -

前回RabbitMQのインストールをしたので、RabbitMQの基本を学習していきます。
私自身がRabbitMQの初心者なので用語から学習していきます。言語はrubyを使います。

  • mac
  • vagrant1.7.2(cent os)

環境はcentosを利用します。ただ、今後はUbuntuに変更しようか迷っています。こういったデータもありますので…。
とりあえず今回のプロジェクトはcentosなので、centosを利用します。

git2.3.2をインストール

centos6.5のgitのバージョンは1.7.1です。せっかくなので2.3.1に変更します。


// yumをintsall 
sudo yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
// source install
wget wget https://www.kernel.org/pub/software/scm/git/git-2.3.2.tar.gz
// 解凍
tar -zxf git-2.3.2.tar.gz

cd git-2.3.2
make prefix=/usr/local all
sudo make prefix=/usr/local install

// git version check
git --version
git version 2.3.2

ruby2.2.2をインストール


git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
rbenv --version
rbenv 0.4.0-146-g7ad01b2
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenv install --list

  2.2.0
  2.2.1
  2.2.2
  2.3.0-dev

rbenv install 2.2.2
rbenv global 2.2.2
ruby -v

Hello worldの実装

まずはHello worldを実装して基本的な動きを理解します。

用語

  • producer : 送り手
  • consumer : 受け手

The Bunny client libraryをインストール

RabbitMQをrubyで動かすためのライブラリを導入します。


gem install bunny --version ">= 1.6.0"

上記ではグルーバルなgemを利用してますが、railsアプリ等を利用している人はBundlerを使いましょう。

送信

producer(send.rb)を作成


#!/usr/bin/env ruby
# encoding: utf-8

require "bunny"

conn = Bunny.new
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         

メソッド名が非常に分かりやすく実装されています。

重要なポイントは"ch.default_exchange.publish("Hello World!", :routing_key => q.name)"の部分です。

exchangeはAMQPプロトコルのExchangeのことです。Exchangeは、生成されたMessageを受け取る役割を持ちます。
Routing keyはメッセージプロパティの一つです。デフォルトのExchangeはひとつのキューのメッセージへの道筋となります。

producer(send.rb)を実行


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

上記の処理ではExchangeから、"hello"というrouting_keyを指定して、キューに"Hello World!"というメッセージを設定しています。

受信

Consumer(receive.rb)を作成


#!/usr/bin/env ruby
# encoding: utf-8

require "bunny"

conn = Bunny.new(:automatically_recover => false)
conn.start

ch   = conn.create_channel
q    = ch.queue("hello")

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

  exit(0)
end      

consumer(receive.rb)を実行


ruby receive.rb
 [*] Waiting for messages. To exit press CTRL+C
 [x] Received Hello World!

上記のプログラムは、CTRL+Cを押すまで動き続けます。
もう一つターミナルを開いてsend.rbを実行してみてください。Consumer側のターミナルでsend.rbで送信したメッセージが表示されるはずです。

動作が確認できたら、これでHello worldは終了です。CTRL+Cでプログラムを止めましょう。

以上。(多分)まだ続きます。

参考サイト

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...