使用activeMQ作为媒介在模块之间传递数据。让生产者P,订户S1 S2从P读取。使用队列作为数据集以循环方式分派数据。 S1,S2正在按预期接收数据。拥有S1,S2是为了实现故障安全和负载平衡。在处理数据后发送ACK,以确保我们不会错过来自P的任何数据。
观察到一个场景,其中S1已关闭并且一些数据已被读取且未完全处理(因此,尚未发送ACK)。我期待ActiveMQ重新发送(un-ACK' ed)数据到S2。当然,数据在重启时被分派到S1。但时间框架也很重要。
帮助我了解实现该机制。感谢帮助。
答案 0 :(得分:1)
...... S1关闭......我期待ActiveMQ重新发送(未确认)数据到S2
这不会发生吗?当你说S1关闭时,你的意思是它实际上是关闭了,还是你的意思是它只是无法处理任何消息,因为它已经挂起了?
在后一种情况下,您所看到的行为是设计的 - 只要S1仍然连接,代理就不会在S1的预取缓冲区中释放消息(至少在消息过期超时之前)。
在前一种情况下,S1的队列连接保持活动超时将被命中(在可配置的时间之后),并且S1的预取中的所有消息都应该回滚到代理并且可供S2处理。