2

HornetQ で ActiveMQ-CPP を使用しようとしています。私は ActiveMQ-CPP バンドルの例を使用していますが、それで苦労しています。プロデューサーは魔法のように機能しますが、コンシューマーからは次のメッセージが表示されます。

* BEGIN SERVER-SIDE STACK TRACE
Message: Queue /queue/exampleQueue does not exist Exception Class
END SERVER-SIDE STACK TRACE *

FILE: activemq/core/ActiveMQConnection.cpp, LINE: 768
FILE: activemq/core/ActiveMQConnection.cpp, LINE: 774
FILE: activemq/core/ActiveMQSession.cpp, LINE: 350
FILE: activemq/core/ActiveMQSession.cpp, LINE: 281
Time to completion = 0.161 seconds.

問題は、キューが存在することです。コードは ActiveMQ+Openwire で問題なく動作しますが、HornetQ+STOMP では同じように動作しません。

何か案は?

4

2 に答える 2

2

Hornetq で定義したものと同じキューのアドレスを宛先として設定してみてください。

おそらく、あなたのキューは HornetQ で次のように定義されています

 <queue name="exampleQueue">
     <address>jms.queue.exampleQueue</address>
 </queue>

そのため、STOMP 経由でこのアドレスに接続してみてください。

プロトコルに従って次のフレームを参照してください。

キューへのサブスクライブ

SUBSCRIBE
destination:jms.queue.exampleQueue

^@

メッセージの送信

SEND
destination:jms.queue.exampleQueue

it works
^@

メッセージが送信されるとすぐに、キューにサブスクライブしたセッションでメッセージを取得します

MESSAGE
timestamp:1311355464983
redelivered:false
expires:0
subscription:subscription/jms.queue.exampleQueue
priority:0
message-id:523
destination:jms.queue.exampleQueue

it works

- 編集

追加したいポイントが1つあります...

HornetQ は STOMP の命名基準 ( http://community.jboss.org/message/594176を参照) に準拠していないため、activemq-cpp が ativemq-nms の動作に従っている可能性があります。 STOMP 標準: "/queue/YourQueue" (および命名の問題が発生します)。

その場合、宛先名を「jms.queue.exampleQueue」に変更しようとしても、activemq-cpp はそれを「/queue/jms.queue.exampleQueue」に正規化できます。

NMS+HornetQ では、これを回避する「すぐに使える」方法はありません。唯一の選択肢は、NMS のソース コードを編集して、キューの名前を正規化する部分を削除することです。たぶん、activemq-cpp でも同じ方法です。

于 2011-07-26T12:57:04.380 に答える
1

HornetQ は、SUBSCRIBE の「/queue/」プレフィックスを好みません。StompHelper の ToStomp メソッドからそれを取り出したところ、すべてが機能しました。

于 2010-12-14T19:33:35.220 に答える