问题描述
我想使用 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-configuration与https://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
对应无限重试