JMS AUTO_ACKNOWLEDGE什么时候被确认?

时间:2012-07-26 16:01:33

标签: java jms messaging

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

2 个答案:

答案 0 :(得分:26)

请检查此one

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

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

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

答案 1 :(得分:6)

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

source
Best example