Software development of explosion! -夢の破片(カケラ)たちの日々-

ソフトウェア開発を中心としたコンピューター関連のネタを扱ったブログです

Software development is passion and explosion!

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から送信