【发布时间】:2012-06-20 13:17:24
【问题描述】:
我正在尝试使用 onMessage 方法中的消息,因为我希望在一个事务中使用多条消息以提高性能。
但是
Message message = consumer.receive();
返回空值。它甚至不会阻塞。买为什么?它必须被阻止,直到它收到消息,不是吗?
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void onMessage(Message message) {
QueueConnection queueConnection = null;
queueConnection = qcf.createQueueConnection();
queueConnection.start();
queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = queueSession.createQueue(sessionConnParams.toString());
consumer = queueSession.createConsumer(queue);
// it works in cycle
System.out.println("before receive");
Message message = consumer.receive();
System.out.println("after receive");
if (message == null) {
System.out.println("no messages");
return;
}
// process message
} catch (Exception e) {
// process exception
} finally {
// close objects
}
}
【问题讨论】:
-
对不起,我不小心添加了这个标签。
-
是否有特定原因在 MDB 的 onMessage() 中创建消费者并接收消息,因为调用 onMessage() 方法的目的是传递消息?那么为什么要再次调用接收呢?
-
是的。我需要在一个事务中获取多条消息以提高性能。我不知道其他选项。
标签: jakarta-ee websphere ibm-mq message-driven-bean