qpidでルーティングを作るときのメモ
qpidでルーティングを作るとき、QueueからQueueにルートを作るようにしないと、送り元で一度受け取って、送り先が起動したタイミングで再送、という動作が実施できない。
しかし、qpid-configでqueueルートを作る場合、指定できるのが送り元のqueueと送り先のexchangeとなっており、queueからqueueへのルートを作るには工夫が必要となる。
上手くいった構成としては、次の順で、Queue,Exchange,QueueをQueueルート、およびbindでつないだときだった。
※ メッセージの送信/受信は、サンプルのspout/drain で実施
hello2(queue, centos-virt12) -> (routing) -> helloexch(exchange, centos-virt11) -> (bind) -> hello(queue, centos-virt11)
事前準備
(centos-virt11)$ qpid-config add queue hello (centos-virt12)$ qpid-config add queue hello2 (centos-virt11)$ qpid-config add exchange fanout helloexch (centos-virt11)$ qpid-config bind helloexch hello (centos-virt11)$ qpid-route queue add centos-virt11 centos-virt12 helloexch hello2 ※ $ qpid-route route map で確認可能
確認
(centos-virt12)$ spout hello2 (centos-virt11)$ drain -f -r hello ※ centos-virt11上でメッセージが表示されることを確認する
なお、ルーティングのテストをする場合、同じブローカー内ではルートが作れないので注意。。
$ qpid-route queue add localhost localhost hello2 hello Failed: Exception - Linking broker to itself is not permitted
追記:
※ bind があるかどうかを確認するには
$ qpid-tool > list exchange > list queue から接続元/接続先 を調べて、 > list binding > show (bindID) exchangeRef queueRef を調べていくしかなさそう。。