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