Software development of explosion! −夢の破片(カケラ)たちの日々 別館− このページをアンテナに追加 RSSフィード Twitter

2012年07月09日

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