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

问题描述 投票:0回答:2

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

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

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

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

我尝试了最简单的选择:

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 lib 版本 1.8。

相关代码片段是

var factory = new ConnectionFactory(connectionString);
var connection = factory.CreateConnection();
var session = connection.CreateSession(); // hangs here
activemq failover nms apache-nms
2个回答
1
投票

有 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.
  • 为前缀
  • 选项
    transport.startupMaxReconnectAttempts=0
    对应无限重试

0
投票

我不知道这是否正确,但在尝试进行大量阅读后,我发现使用 NMS 2.0.0 和 NMS.ActiveMq 2.0.1 为自己工作的唯一机制是使用以下连接字符串(在docker中运行时):

activemq:failover:(activemq:tcp://localhost:61616,activemq:tcp://localhost:61617,activemq:tcp://localhost:61618)

仅使用

failover:
前缀会导致抛出类似于以下内容的异常:
Apache.NMS.NMSConnectionException: No IConnectionFactory implementation found for connection URI:

© www.soinside.com 2019 - 2024. All rights reserved.