我创建了一个连接到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();
...
}
Run Code Online (Sandbox Code Playgroud)
true在queueSession创建中,这是因为连接工厂是事务处理的.如果我创建一个no transacted queueSession(通过put false),结果是queueReceiver似乎忽略了receive()通过该doStuff方法的方法(使用相同的行为receive(timeout),它不会在经过之前等待).
我还必须在我的连接工厂(WebLogic连接工厂的配置中的客户端选项卡)上启用同步消费者的预取模式.
我的问题是接收器没有读取发送到队列的任何消息.
我可以在WebLogic控制台上看到我的消息,我甚至可以看到我的queueReceiver正在侦听队列,但是queueReceiver似乎忽略了它们.
替代方法我试过的方法:
send()和之前的生产者会议close()谢谢.
你忘了在以下start方法上调用方法QueueConnection:
queueConnection = qconFactory.createQueueConnection();
queueConnection.start();
queueSession = queueConnection.createQueueSession(true, -1);
Run Code Online (Sandbox Code Playgroud)
正如Java EE教程中的JMS API编程模型有用地说:
在应用程序使用消息之前,必须调用连接的
start方法.
" JMS消息使用者"部分使其更加清晰:
记得总是打电话给
start方法; 忘记启动连接是最常见的JMS编程错误之一.