Transactions 消费者选择的JMS单一消息确认

Transactions 消费者选择的JMS单一消息确认,transactions,jms,Transactions,Jms,考虑以下使用JMS队列的场景:我们有一个JMS代理B,队列Q和MessageConsumer C1由会话S1创建。C1通过onMessage()方法调用(异步)接收消息M1、M2、M3,并启动线程T1、T2、T3以并行处理M1、M2、M3。我们不知道完成T1、T2、T3需要多少时间。在某个时间点,T2是完成执行的第一个线程:是否可以向代理B确认(或提交)M2,如果会话S1很快关闭,那么M1和M3将由B保留并重新交付给另一个会话S2和另一个使用者C2 Session.CLIENT_ACK不是我们需

考虑以下使用JMS队列的场景:我们有一个JMS代理B,队列Q和MessageConsumer C1由会话S1创建。C1通过onMessage()方法调用(异步)接收消息M1、M2、M3,并启动线程T1、T2、T3以并行处理M1、M2、M3。我们不知道完成T1、T2、T3需要多少时间。在某个时间点,T2是完成执行的第一个线程:是否可以向代理B确认(或提交)M2,如果会话S1很快关闭,那么M1和M3将由B保留并重新交付给另一个会话S2和另一个使用者C2


Session.CLIENT_ACK不是我们需要的,一些JMS实现的单个_ACK可能是我想要的,但它不是JMS标准。也许JMS事务可以解决这个问题?

接口定义了允许确认单个消息的
acknowledge
。因此,您可以在T2中调用
message.acknowledge


附带说明:根据JMS提供程序的实现,可能已经从多个线程调用了onMessage()回调。

acknowledge方法确认给定会话的所有已使用消息