2017-03-07 104 views
1

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

观察到一个场景,其中S1处于关闭状态且读取了一些数据并且没有完全处理(所以没有发送ACK然而)。我期待ActiveMQ重新发送(未确认)的数据到S2。当然,数据在重新启动时被分派到S1。但时间框架也很重要。

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

+0

看看这里http://stackoverflow.com/questions/42470534/multithreaded-jms-client-activemq/42472281#42472281 –

+0

@HassenBennour-不知道预取设置如何在这种情况下帮助? –

回答

1

...其中S1是下来...我期待的ActiveMQ要重新发送(未ACK'ed)数据S2

,这是没有发生?当你说S1停机时,你的意思是它实际上是关闭的,还是你的意思是它只是无法处理任何消息,因为它挂了?

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

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

+0

这是后一种情况,悬挂。得到了我的答案。谢谢。 – srikanth

+0

@srikanth - 请评论你的实际解决方案,以帮助他人解决同样的问题。谢谢! –