【发布时间】:2011-12-01 04:23:24
【问题描述】:
我正在尝试脱离 ActiveMQ,但我们想要保留的一项功能是消息组。通过向 JMS 标头添加会话 ID,ActiveMQ 会将队列中具有相同 ID 的所有其他消息路由到同一消费者(我们的消费者可能在不同的机器上),从而允许接收者将一组消息视为一个工作单元。
我的第一个想法就是将会话置于 CLIENT_ACKNOWLEDGE 模式。我的想法是,如果消费者 A 查看标头并发现它不是它正在处理的 ID,那么它可以丢弃消息,而消费者 B 会捡起它。我遇到了几个问题,包括 ActiveMQ 的 prefecting,而且我读的越多,就越觉得这不是最初的设计目标。
我能想到的一个想法是有一个调度队列,然后将消息路由到每个消费者的,因为没有更好的词,子队列并自己管理将会话 ID 与子队列匹配。
在我走上这条路之前,我们对此持怀疑态度,因为它会给代码增加比我们想要的更多的复杂性,我对 CLIENT_ACKNOWLEDGE 有什么遗漏吗?还是我应该先尝试其他完全不同的东西?
【问题讨论】: