【问题标题】:ActiveMQ FailoverTransport reconnecting too fast on Linux compared to Windows与 Windows 相比,Linux 上的 ActiveMQ FailoverTransport 重新连接速度太快
【发布时间】:2015-10-06 13:56:14
【问题描述】:

我的 Linux 机器上有一个 ActiveMQ 代理和一个独立的 Java 应用程序,它充当我的 Windows 机器上运行的生产者。 Windows 和 Linux 机器都使用相同版本的 Java 7。

我将代理网址指定为:

failover://(tcp://10.0.112.49:61616)?timeout=1000&warnAfterReconnectAttempts=1&maxReconnectAttempts=0`

Windows 场景: 我启动我的应用程序,它会自动连接到 ActiveMQ 代理。当我停止代理时,FailoverTransport 每秒都会尝试重新连接。

2015-07-16 15:14:52,737 错误 [ActiveMQ 任务 1] (FailoverTransport.java:1099) CSN:连接失败 [tcp://10.0.112.49:61616] 之后:1 次尝试

这是预期的行为。

但是,当我在 Linux 上运行应用程序时,它不是每秒重新连接一次,而是每 5-10 毫秒重新连接一次!我想知道为什么行为不同。

【问题讨论】:

  • 您是否检查过文档以确认它们都以毫秒为单位读取值? (而不是 windows 以毫秒为单位读取它,而 linux 以微秒为单位读取它。)
  • 文档不多说。

标签: java linux activemq


【解决方案1】:

您的问题是您不了解timeout 选项。这是documentation 所说的

超时

在不中断重新连接过程的情况下启用发送操作超时(以毫秒为单位)

但是在Configuring ActiveMQ-CPP 中,我认为它描述得更好(但还是一样)。

超时

如果发送被阻止等待失败的连接重新连接如何 在发送失败之前它应该等待多长时间,默认为永远 (-1)。

如果我理解你,你想要的选项是initialReconnectDelaymaxReconnectDelayuseExponentialBackOff

另见:

  1. How do I configure automatic reconnection
  2. How can I support auto reconnection
  3. using activemq failover URI for reconnecting, while timeout on first connection

【讨论】:

  • 我认为这与超时无关,因为生产者已经与代理断开连接。这更像是一个重新连接的问题,我不确定你是否理解我的问题。当我在 Windows 中运行我的应用程序并且由于某种原因(例如 ActiveMQ 已停止)失去其 ActiveMQ 连接时,FailoverTransports 每秒重新连接一次。但是,当我在 Linux 中运行我的应用程序时,它不是每秒重新连接一次,而是每 5-10 毫秒重新连接一次。
  • @MiguelPortugal 好吧,根据您的问题,我得出的结论是,由于timeout=1000,您预计重新连接时间为 1 秒,我猜我错了。但是,更准确地说,我的回答是您需要尝试我在回答中提出的其他选项。
猜你喜欢
  • 2011-04-11
  • 1970-01-01
  • 2018-10-10
  • 2017-10-24
  • 1970-01-01
  • 2012-03-21
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多