0

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

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

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

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

我尝试了最简单的选择:

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

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

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

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

但没有想要的结果。

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

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

相关的代码片段是

var factory = new ConnectionFactory(connectionString);
var connection = factory.CreateConnection();
var session = connection.CreateSession(); // hangs here
4

1 回答 1

0

有 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.
  • 选项transport.startupMaxReconnectAttempts=0对应于无限重试
于 2021-02-12T07:35:56.427 回答