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

似乎您以错误的顺序执行此操作。通常,消费者通过打开临时队列进行输入来创建临时队列,然后使用该对象填写请求消息上的回复字段。服务提供者应用程序在预定义的、众所周知的队列上侦听请求消息,然后使用请求中的回复字段来处理响应。通过这种方式,生产者应用程序根据收到的请求发现动态队列。

动态队列通常不用作请求或数据报消息的目的地。这些用例需要一个预定义的、众所周知的队列,消费者可以监听该队列。动态队列几乎总是用于请求-回复交换中的回复消息。

于 2010-08-25T15:38:05.790 回答
0

根据J2EE 1.4 文档

TemporaryQueue 对象是在 Connection 期间创建的唯一 Queue 对象。它是一个系统定义的队列,只能由创建它的 Connection 使用。

我怀疑你正试图从不同的连接中消费。

于 2010-03-10T15:49:50.747 回答