QueueReceiver receive()不接收消息

sep*_*eph 1 java weblogic jms

我创建了一个连接到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似乎忽略了它们.

替代方法我试过的方法:

  • 在queueSession创建中改变ACK类型(双方,生产者和消费者)
  • 之后send()和之前的生产者会议close()

谢谢.

Dan*_*nga 5

你忘了在以下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编程错误之一.