【发布时间】:2014-03-31 05:03:46
【问题描述】:
我创建了一个连接到 WebLogic 队列的同步 QueueReceiver。
doStuff() {
ctx = new InitialContext();
qconFactory = (QueueConnectionFactory) ctx.lookup(CONNECTION_FACTORY);
queue = (Queue) ctx.lookup(outputFromOrcSyncQueue);
queueConnection = qconFactory.createQueueConnection();
queueSession = queueConnection.createQueueSession(true, -1);
queueReceiver = queueSession.createReceiver(queue);
Message message = queueReceiver.receive();
...
}
true 在 queueSession 创建中这是因为连接工厂已处理。
如果我创建一个无事务队列会话(通过放置false),结果是queueReceiver 似乎忽略了通过doStuff 方法的receive() 方法(使用receive(timeout) 的行为相同,它在通过之前不会等待)。
我还必须在我的连接工厂(WebLogic 连接工厂配置中的客户端选项卡)上启用Prefetch Mode for Synchronous Consumer。
我的问题是接收者没有读取任何发送到队列的消息。
我可以在 WebLogic 控制台上看到我的消息,我什至可以看到我的 queueReceiver 正在侦听队列,但 queueReceiver 似乎忽略了它们。
我尝试过的替代方法:
- 在创建 queueSession 时更改 ACK 类型(双方,生产者和消费者)
- 在
send()和close()之前提交生产者会话
谢谢。
【问题讨论】: