ActiveMQ 故障转移传输选项未按预期工作

问题描述

我想使用 https://activemq.apache.org/failover-transport-reference.html 中所述的 ActiveMQ 故障转移传输。

认的“永远重试”故障转移选项按预期工作。

然而,由于“永远”有时太长,我尝试设置一些选项以提前终止重试。

例如,在启动时,如果第一次尝试无法建立到代理的连接,我想立即终止应用程序。

我尝试了最简单的选择:

argv

但令我惊讶的是,重试仍然“永远”进行。

我尝试了许多其他选项组合,例如

failover:tcp://localhost:61616?startupMaxReconnectAttempts=0

但没有想要的结果。

我做错了什么?如果代理不可用,我该如何配置故障转移传输,使其在启动时终止重新连接尝试?

我使用的是 ActiveMQ 版本 5.15.9 (https://hub.docker.com/r/rmohr/activemq) 和 Apache.NMS.ActiveMQ 库版本 1.8。

相关代码片段是

failover:tcp://localhost:61616?startupMaxReconnectAttempts=0&maxReconnectDelay=10&maxReconnectAttempts=0&timeout=10

解决方法

有Apache.NMS.ActiveMQ特定的URI配置:https://activemq.apache.org/components/nms/providers/activemq/uri-configurationhttps://activemq.apache.org/failover-transport-reference.html不一致,带来很多混乱。

根据 NMS 文档,我想出了一个可行的解决方案:

failover:(tcp://localhost:61616)?transport.startupMaxReconnectAttempts=1
  • 复合 URI 必须在括号中:failover:(tcp://localhost:61616)?... 而不是 failover:tcp://localhost:61616?...
  • 传输特定选项必须以 transport. 为前缀
  • option transport.startupMaxReconnectAttempts=0 对应无限重试