Subscriber Queue 的多实例 | ActiveMQ

Multi-instances of Subscriber Queue | ActiveMQ

使用activeMQ作为媒介在模块之间进行数据通信。让生产者 P、订阅者 S1 S2 从 P 读取。使用队列作为数据集以循环方式调度数据。 S1、S2 正在按预期接收数据。有了S1,S2就是为了实现故障安全和负载均衡。处理完数据后发送ACK,以确保我们不会错过任何来自P的数据。

观察到 S1 关闭并读取了一些数据但未完全处理的情况(因此,尚未发送 ACK)。我期待 ActiveMQ 将数据重新发送(未确认)到 S2。当然,数据会在重启时发送到 S1。但时间框架也很重要。

帮我理解实现机制。感谢帮助。

... where S1 is down... I was expecting ActiveMQ to re-sent(un-ACK'ed) data to S2

这不会发生吗?当您说 S1 已关闭时,您是说它实际上已关闭,还是说它只是因为挂起而无法处理任何消息?

在后一种情况下,您看到的行为是设计使然 - 只要 S1 仍处于连接状态,代理就不会释放 S1 的预取缓冲区中的消息(至少在达到消息超时超时之前)。

在前一种情况下,S1 的队列连接保持活动超时将被命中(在可配置的时间之后),并且 S1 的预取中的所有消息都应回滚到代理并可供 S2 处理。