人生のエラー集 -5ページ目

人生のエラー集

バグ出し率トップを誇るへっぽこプログラマーが発生させたエラーをメモのために残します。
同じエラーで悩む人の解決策になりますように…

趣味のことも書いたりしますが。

思っているだけで、全然わからない。英語ばっかりだし。

とりあえず、やってみたことを書いていきます。

まず、このURLを参考に、rabbitmqの環境構築をしてみました。
ポリシーの設定とクラスタ構成のところはやらなくても大丈夫そうだったのでやらなかったです。
http://qiita.com/rubytomato@github/items/0c41b4c409671aeb5b80
とても参考になりました。
この記事を書いた方、あなたは神様ですか?ありがとうございます。

さて、これでrabbitmqが多重起動できるようになりました。
今回はrabbitmqのpluginであるshovelを使ってみることが目的です。

そもそも、shovelとは何なんでしょう。書いてる本人はよくわかっていません。
ざっくり書くと、
複数サーバでrabbitmqが起動していて、同じ内容のメッセージを受け取りたいとき、
1つのサーバにメッセージを書いておくだけでその内容が別のサーバにも配信される。
ということみたいです。
サーバ間の連携をアプリなしでできるってことですかね。
連携の対象はExchangeでもQueueでもいいみたいで、
shovelが管理するものは「どのサーバ」の「どのExchange/Queue」を自分のサーバに取り込むかのルールのようです。
メッセージの取りこぼしはないように作られているらしいです。
設定にはvhostの設定が必要なので、先ほどのサイトを参考に作ってみてください。
詳しくは本家のサイトをご覧ください。
https://www.rabbitmq.com/shovel.html

では、先に進みます。

まず、shovelを有効化しましょう。
rabbitmq-plugins enable rabbitmq_shovel
これで有効化。
rabbitmq-plugins enable rabbitmq_shovel_management
これでRabbitMQ Managementからshovelの管理ができるようになりました。
すでに管理画面を開いている人はF5を連打して最新にしましょう。
AdminタブのVirtual Hostsの下に新しいリンクが追加されていると思います。
Shovel Status
Shovel Management
があれば大丈夫です。

では、
今回は先ほど紹介したサイトで環境構築したので、それをベースに設定を行っていきます。

rabbit_node2のv2にshovelの設定を行い、rabbit_node1のExchange(notice.topic)のメッセージをrabbit_node2のv2のExchange(notice.topic)に取り込んでみようと思います。

管理画面のShovel ManagementからAdd a new shovelに以下の内容で設定を行ってください。
管理画面ではDynamic Shovelsの設定が可能です。

Virtual host: v2
Name:     my_first_shovel
Source:
URI :     amqp://guest:guest@localhost:5672/v2
Exchange :    notice.topic
Routing key:   *.info
Destination:
URI :     amqp://guest@/v2
Exchange :    notice.topic
Routing key:   *.info

あとはオプションなので設定しなくても大丈夫です。
Add shovelを押して設定をしてみましょう。
編集ができないみたいなので、間違えてしまったら一旦Deleteして再作成するしかないです。

作成が成功していれば、Shovel Status画面の作成したshovelのstateがrunningになっているはずです。
失敗した場合はJSON形式っぽい感じでエラーメッセージが出力されます。
ただ、これを見ても何をすればいいのかわかりません。

設定値の説明ですが、
・『Virtual host』は自身のサーバのVirtual hostです。Shovelの設定を持たせるvhostを設定しましょう。
・『Name』はshovelの名前です。半角英数字を使えば問題ないと思います。
・『Source』はメッセージが設定されるExchangeやQueueのことです。Exchangeを設定した場合はRouting keyが設定できます。
・『Destination』はSourceのメッセージを設定するExchangeやQueueのことです。Sourceが受信したメッセージを自身のサーバではなく、別サーバにも送ることができるっぽいですね。

検証として、管理画面からnode1のv2のExchange(notice.topic)にメッセージを送ってみましょう。
Pubish MessageのRouting keyには『*.warn』を設定して、Payloadには適当な文字を入れて送信すると、
node2のQueueにもメッセージが入っているはずです。
notice.topicは2つのQueueにBindされているので、2つのQueueにメッセージが配信されたと思います。

これでDynamic Shovelsの説明は一通り終わりました。

shovelにはStatic Shovelsという方法もあるんですが、
これはshovelの設定をconfigファイルに記載して、rabbitmq起動時に読み込ませる方法です。
設定を変えるには再起動が必要となります。


以上でshovelの説明は終了です。あんまりshovelって名前でしたけど、shovel感がなかった気がします。

何か不備があったり間違った内容があったらお知らせください。
誰かの役に立てばいいなと思います。

調査にたくさんの時間を費やした自分に、さようなら。