JMS AUTO_ACKNOWLEDGE何时得到承认?

2022-09-01 10:41:49

我试图谷歌这个,但没有成功。如果我使用的是 ,并且我有一个用 Java 编写的使用者客户端,那么消息何时得到确认?我正在使用一个包含方法的方法。确认是在完成之前还是之后还是在其他某个时间点发送回服务器?提前感谢任何人都可以提供的任何帮助!AUTO_ACKNOWLEDGEMessageListeneronMessageonMessageonMessage


答案 1

请检查这个(自2020年以来用作文章的Wayback Machine链接已下线)

在模式中,确认始终是处理程序返回后隐式发生的最后一件事。接收消息的客户端可以通过指定使用会话的模式来更精细地控制有保证消息的传递。AUTO_ACKNOWLEDGEonMessage()CLIENT_ACKNOWLEDGE

使用 允许应用程序控制何时发送确认。例如,应用程序可以确认消息 -- 从而免除 JMS 提供程序的职责 - 并对消息所表示的数据执行进一步处理。关键是 Message 对象上的 acknowledge() 方法,如清单 1 所示。CLIENT_ACKNOWLEDGE

该方法通知 JMS 提供程序使用者已成功接收到消息。如果在确认过程中发生提供程序故障,则此方法将向客户端引发异常。提供程序失败会导致 JMS 服务器保留消息以进行重新传递。acknowledge()


答案 2

CLIENT_ACKNOWLEDGE
使用此确认模式时,客户端通过调用消息的确认方法来确认已使用的消息。

Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
...
msg = (TextMessage) consumer.receive();
//acknowledge
msg.acknowledge();

AUTO_ACKNOWLEDGE
使用此确认模式,当会话已成功从要接收的调用返回时,或者当会话已调用以处理消息的消息侦听器成功返回时,会话将自动确认客户端已收到消息。

Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);


最佳示例


推荐