から一時的な送り先を使用することはできません。javax.jms.InvalidDestinationException:私はクライアントに私にメッセージを送信するためのActiveMQブローカーに接続するプロデューサーを持っている別のConnection
- それはクライアントからいくつかの応答を期待するので、最初の一時キューを作成し、ヘッダREPLYTO JMSにそれを関連付けます。
- 次に、メッセージをブローカに送信し、クライアントからの一時キューに対する応答を待ちます。
- クライアントからの応答を一時キュー経由で受信し、必要なアクションを実行してから終了します。
これはほとんどの場合うまく動作しますが、アプリケーションが「別の接続から作成されたキューを使用できません」というエラーメッセージをスローします。
私は一時キューは、現在のセッション自体から作成されているように、この現象が発生する可能性がありますどのように識別することができません。
他の誰かがこの状況に遭遇し、それを修正する方法を知っていましたか?
コードスニペット:ここ
Connection conn = myJmsTemp. getConnectionFactory().createConnection();
ses = conn.createSession(transacted,ackMode);
responseQueue = ses.createTemporaryQueue();
...
MyMessageCreator msgCrtr = new MyMessageCreator(objects,responseQueue);
myJmsTemp.send(dest, msgCrtr);
myJmsTemp.setReceiveTimeout(timeout);
ObjectMessage response = (ObjectMessage)myJmsTemplate.receive(responseQueue);
MyMessageCreator
はMessageCreator
インタフェースを実装しています。
すべてがやろうとしていますブローカにメッセージを送信し、一時キューを介してクライアントからの応答を待つです。また、プールされた接続ファクトリを使用して接続を取得しています。
これはコードスニペットです:
接続conn = myJmsTemp。 getConnectionFactory()。createConnection();
ses = conn.createSession(トランザクション済み、ackMode);
responseQueue = ses.createTemporaryQueue();
...
MyMessageCreator msgCrtr =新しいMyMessageCreator(オブジェクト、RESPONSEQUEUE)。
myJmsTemp.send(dest、msgCrtr);
myJmsTemp.setReceiveTimeout(タイムアウト);
ObjectMessage response =(ObjectMessage)myJmsTemplate.receive(responseQueue);
MyMessageCreatorクラスはMessageCreatorを実装し、createmessageメソッドを実装します。 これで何か変なことはありますか? – Hari
私はこのフォーマットされていないコードを実際に読むことができます。元の投稿を編集して、何をしているのかを示すコードセクションを追加できますか? –
Tim、元の投稿に書式設定されたコードスニペットを追加しました。新しい接続を取得したり、接続オブジェクトをどこにでも再初期化しようとしていません。プロデューサーは大抵の場合うまく動作しますが、ここで議論しているエラーを投げたことはほとんどありません。 – Hari