前回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でプログラムを止めましょう。
以上。(多分)まだ続きます。
参考サイト
- CentOS 6.5, yum でインストールした Git を 1.7.1 から 2.2.0 にバージョンアップする (※Git2.2.1,2.3.2版もあり)
- Ruby 2.2.0 インストール(CentOS 6)
- UbuntuとCentOSどっちがいいの?正しいサーバOSの選び方
- 【翻訳】分散型メッセージングライブラリの詳細比較
- Introduction
- AMQPによるメッセージング
- Bunny, a Ruby RabbitMQ Client
0 件のコメント:
コメントを投稿