HornetQ…
HornetQを検証で使っているのだけども、Consumerが居るQueueにQueueBrowserでアクセスしても、キューイングされてるメッセージが拾えない。
推測だけど、マルチスレッドで動いたときに、QueueBrowserの結果が保証出来なくなるのだろう。
なので、java.util.Queue#peek()みたいなことをやるのであれば、createQueueSession(true, Session.TRANSACTED)にしておいて、consumerで一旦receiveしたら、rollbackするくらいしか手がない。
ActiveMQならこんなことないんだけどね。
そもそも、何をやりたいかというと、複数のproducerがQueueにメッセージを送ると、ルーティングして、複数のconsumerが居るQueueに送られる。
そして、その複数のconsumerは、それぞれが別々のメッセージをQueueから受信(このときはQueueからは削除されない)して、別のQueue(ワーキング)に投げ込んでおく。
ワーキングに投げ込めたら、元のQueueからは捨てる(本来のMQ的な受信)。
そんなことがしたいわけです。
ルーティングがHornetQだと簡単に使えるってことなので、HornetQで行こうと思ったんだけど、上述したQueueから削除せずに受信ってのが出来ないわけですよ。
交互にQueueBrowserを開いて閉じてConsumerを開いて閉じてをやって、シングルスレッドなら出来る確認はしてはいるけど、そもそもがそんな使い方すべきじゃないしね。
JMSは使い辛いです。
Kestrelというのを試そうかとも思うけど、ルーティング出来るのかねぇ?ルーティングルールも問題だけど、落ちたときに永続化されてる必要があるのもまた厄介なところ。
まぁ、最悪、Cassandraという最終手段が...本当に最終手段だけど
ってことで、色々と検証してはいるものの、なかなかもって、いい手だてがない。
頑張りますか…
iPhoneから送信