java - 订阅者队列的多实例 | ActiveMQ

标签 java activemq load-balancing failover

使用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 的队列连接保持 Activity 超时将达到(在可配置的时间之后),并且 S1 预取中的所有消息都应回滚到代理并可供 S2 处理。

关于java - 订阅者队列的多实例 | ActiveMQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42644480/

相关文章:

java - ActiveMQ 中代理的动态名称,可在同一台计算机上运行 2 个或多个实例

apache - 使用 Apache Camel 进行负载平衡

java - Android:互联网在模拟器中有效,但在我的手机上无效

java - 通过函数设置字段

java - 在不同的 JDK 上运行的 ActiveMQ 代理和客户端有什么问题吗?

java - 增加一次处理的出队消息数量 (ActiveMQ)

apache2 - mod_proxy 超时 (502) 和故障转移

mysql - 为分布式数据库配置 Web 应用程序

java - 正则表达式数组列表

java - 用 java 编写解释器时的 switch 或 if 语句