首页 文章

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

提问于
浏览
3

考虑使用JMS队列的以下场景:我们有一个带有队列Q的JMS代理B和使用会话S1创建的MessageConsumer C1 . 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实现的SINGLE_ACK可能是我正在寻找的,但它不是JMS标准 . 也许JMS事务可以解决问题?

1 回答

  • -1

    Message 接口定义 acknowledge ,允许确认单个消息 . 所以你可以在T2中调用 message.acknowledge .

    请注意:您的onMessage()回调可能已经从多个线程调用,具体取决于您的JMS提供程序的实现 .

相关问题