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
を調べていくしかなさそう。。