我设置了一个 JMS 队列,由单个生产者提供,并由 8 个不同的消费者使用。
我想配置我的队列/代理,以便传递给消费者的一条消息阻塞队列,直到消费者完成处理消息。在处理此第一条消息期间,可能不会将以下消息传递给另一个消费者。哪个消费者处理哪条消息并不重要,同一消费者连续消费许多消息是可以接受的,只要它死时另一个消费者能够接收其余未处理的消息。
为了做到这一点,我已经将我的所有消费者配置为使用CLIENT
确认模式,并且我已经对它们进行了编码,以便message.acknowledge()
仅在消息处理结束时调用。
我的理解是,这应该足以满足我的要求。
但是我显然错了,因为看起来我的兄弟(OpenMQ)正在尽快将消息传递给消费者,而无需等待消费者确认。结果,我并行处理了多条消息,每个消费者一条消息。
我显然做错了什么,但我不知道是什么。
作为一种解决方法,我认为我可以创建一个持久订阅,其中包含在所有消费者之间共享的固定客户端 ID。它可能只允许一个消费者连接到代理,但我无法摆脱这是一个相当丑陋的解决方法的感觉。
有谁知道我应该如何配置我的经纪人和/或我的客户来实现这一点?