gpt4 book ai didi

java - JMS - 队列中的重新传递流

转载 作者:太空宇宙 更新时间:2023-11-04 14:28:58 25 4
gpt4 key购买 nike

配置

我在 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);

我的理解是,消费者应该处理消息的确认,换句话说,如果消费者调用message.acknowledge()方法,因此应该重新传递消息。是吗?

发生的情况是,当我的 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) {
}

我做错了什么?

最佳答案

嗯,我对此做了很多研究,我发现容器通常会忽略客户端对 session 创建的控制。在本例中: queueConnection.createQueueSession(false, Session.CLIENT_ACKNOWLEDGE); 因此,如果您需要在 MDB 中处理带有确认或不确认的消息进程,则需要使用 EJB 事务。

关于java - JMS - 队列中的重新传递流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26361957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com