3

考虑以下使用 JMS 队列的场景:我们有一个 JMS 代理 B,其中包含队列 Q 和使用会话 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 事务可以解决问题?

4

1 回答 1

-1

The Message interface defines acknowledge which allows for acknowledging single messages. So you could just call message.acknowledge in T2.

As a side note: your onMessage() callback might already be called from multiple Threads, depending on your JMS provider's implementation.

于 2012-12-14T00:07:20.450 回答