30

我试图用谷歌搜索这个,但没有成功。如果我正在使用AUTO_ACKNOWLEDGE,并且我有一个用 Java 编写的消费者客户端,那么何时确认消息?我正在使用一个MessageListener包含方法的onMessage方法。onMessage确认是否在完成之前或之后onMessage或在其他时间发送回服务器?提前感谢任何人能够提供的任何帮助!

4

2 回答 2

35

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

使用AUTO_ACKNOWLEDGE模式,确认总是在onMessage()处理程序返回后隐式发生的最后一件事。CLIENT_ACKNOWLEDGE接收消息的客户端可以通过指定消费会话的模式来对保证消息的传递进行更细粒度的控制。

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

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

于 2012-07-26T16:35:15.143 回答
13

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

最好
的例子

于 2015-12-17T07:29:14.617 回答