【发布时间】:2014-12-09 07:33:09
【问题描述】:
配置
我在 OC4J 10.1.3.x 中使用 EJB 3
问题
我创建了一个具有 CLIENT_ACKNOWLEDGE 方向的队列生产者,例如:
queueConnection = queueConnectionFactory.createQueueConnection();
queueSession = queueConnection.createQueueSession(false,
Session.CLIENT_ACKNOWLEDGE);
queueSender = queueSession.createSender(queue);
ObjectMessage objMessage = queueSession.createObjectMessage();
Mail data = new Mail();
data.setMessage("Some random message.");
objMessage.setObject(data);
queueSender.send(objMessage);
我的理解是consumer应该处理消息的ack,也就是说如果consumerDO NOT调用message.acknowledge()方法,那么消息应该是redelivery。对吗?
发生的情况是,当我的 MDB 刚刚读取消息(由侦听器 onMessage)时,该消息刚刚从队列中取出(独立于我是否调用 message.acknowledge() 方法)。
public void onMessage(Message message) {
try {
if (message instanceof ObjectMessage) {
ObjectMessage objectMessage = (ObjectMessage) message;
Mail mail = (Mail) objectMessage.getObject();
System.out.println(mail.getMessage());
throw new RuntimeException("Error");
}
} catch (JMSException e) {
}
我做错了什么?
【问题讨论】:
标签: java jakarta-ee jms message-queue message-driven-bean