2

JMS で TemporaryQueue を作成して使用しようとしました。プロデューサーは成功しますが、コンシューマーはこのように失敗し、次のエラーが発生します。この質問には完全なコードが必要な場合があることは理解していますが、非常に長いので、誰もそれをソートしたくないと確信しています。ただし、ここで説明した内容から答えが明らかでない場合は、TemporaryQueues または TempTopics を扱うリソースを教えてください。よろしくお願いします。

[編集] コードとエラーを添付するのを忘れました:

エラーの原因となるコード:

QueueReceiver myRecv = mySession.createReceiver(myQueue);

エラー:

CWSIA0086E: Failed to create a MessageConsumer for queue://_Q_CBF079A6A1E3018A0000000000262775?busName=myBus2
    at com.ibm.ws.sib.api.jms.impl.JmsMsgConsumerImpl.createCoreConsumer(JmsMsgConsumerImpl.java:689)
    at com.ibm.ws.sib.api.jms.impl.JmsMsgConsumerImpl.<init>(JmsMsgConsumerImpl.java:391)
    at com.ibm.ws.sib.api.jms.impl.JmsQueueReceiverImpl.<init>(JmsQueueReceiverImpl.java:58)
at com.ibm.ws.sib.api.jms.impl.JmsQueueSessionImpl.instantiateConsumer(JmsQueueSessionImpl.java:203)
at com.ibm.ws.sib.api.jms.impl.JmsSessionImpl.createConsumer(JmsSessionImpl.java:950)
at com.ibm.ws.sib.api.jms.impl.JmsSessionImpl.createConsumer(JmsSessionImpl.java:900)
at com.ibm.ws.sib.api.jms.impl.JmsQueueSessionImpl.createReceiver(JmsQueueSessionImpl.java:123)
at com.ibm.ws.sib.api.jms.impl.JmsQueueSessionImpl.createReceiver(JmsQueueSessionImpl.java:100)
4

2 に答える 2

1

間違った順序でこれを行っているようです。通常、コンシューマは入力用に一時キューを開いて作成し、そのオブジェクトを使用してリクエスト メッセージの Reply-To フィールドに入力します。サービス プロバイダー アプリケーションは、事前定義された既知のキューで要求メッセージをリッスンし、要求の Reply-To フィールドを使用して応答に対処します。このようにして、プロデューサー アプリは、受信した要求に基づいて動的キューを検出します。

動的キューは、通常、要求またはデータグラム メッセージの宛先としては使用されません。これらのユース ケースでは、コンシューマがリッスンする事前定義済みの既知のキューが必要です。動的キューは、ほとんどの場合、要求と応答の交換における応答メッセージ用です。

于 2010-08-25T15:38:05.790 に答える
0

J2EE 1.4ドキュメントによると:

TemporaryQueue オブジェクトは、接続中に作成される一意の Queue オブジェクトです。これは、それを作成した Connection だけが使用できるシステム定義のキューです。

別の接続から消費しようとしていると思われます。

于 2010-03-10T15:49:50.747 に答える