【问题标题】:ActiveMQ NMS: Using transport.requesttimeout with failover transportActiveMQ NMS:将 transport.requesttimeout 与故障转移传输一起使用
【发布时间】:2011-08-02 11:34:49
【问题描述】:

为了尝试缓解在我的应用程序中出现 ActiveMQ 连接问题期间可能出现的任何挂起,我正在考虑将以下参数添加到我的应用程序中的代理连接字符串:

?transport.requesttimeout=10000

根据this resource 的说法,这似乎有助于处理这些事件。

但是,我似乎无法让它与我当前的故障转移连接字符串一起使用,它看起来像这样:

failover:(tcp://masterbroker:61616,tcp://slavebroker:61616)?keepAlive=true

这样添加:

failover:(tcp://masterbroker:61616,tcp://slavebroker:61616)?keepAlive=true&transport.requesttimeout=10000

或者,或者像这样:

failover:(tcp://masterbroker:61616?transport.requesttimeout=10000,tcp://slavebroker:61616?transport.requesttimeout=10000)?keepAlive=true

...两者似乎都导致NMS异常或连接失败。

这似乎是一个相对微不足道的问题,但是如何在这种类型的连接字符串中指定传输特定指令?

【问题讨论】:

标签: c# .net activemq nms


【解决方案1】:

在询问这些问题时,您应该始终添加您正在使用的 NMS.ActiveMQ 版本,因为版本之间的行为会有所不同。假设您使用的是最新版本,如果您尝试连接到代理并且它在大约 10 秒后没有运行,我希望第一个表单中出现 NMSException,这就是 URI 告诉它的第二个URI 无效,因为适用于故障转移配置的内部 URI 的唯一选项是被调用的传输类型的选项,在这种情况下是 TCP。

最好退后一步,在这里解释一下您要完成的工作,因为我真的不知道您应用请求超时选项的原因是什么。在大多数情况下,我不会推荐此选项。

keepAlive 选项在这里也没有影响,因为它没有应用于 tcp 传输,所以它只会被忽略。除此之外,tcp 套接字保持活动实际上是无用的,因为它每两个小时左右才启动一次,tcp 传输将为您进行自己的心跳,除非您禁用不活动监视器,因此它们不需要 keepAlive=true。

如果您可以提供更多信息,说明您看到的异常是什么,或者您尝试通过请求超时解决什么问题,我可能会更好地回答您的问题。

-Tim www.fusesource.com

【讨论】:

  • 感谢蒂姆的回复。
  • 我正在使用最新版本的 NMS - v1.5.0。本质上,我试图解决的问题是代理中的故障导致我的应用程序出现问题(使用同步发送)
  • 仍然不清楚请求超时应该为您解决什么问题,仅使用故障转移传输将检测到断开的连接并为您重新连接到新的代理。您还可以在故障转移传输上配置重新连接尝试限制和延迟值,以防您不希望客户端挂在 connection.Start() 方法上(如果没有代理正在运行)。
【解决方案2】:

connection.RequestTimeout=10000代替transport.requesttimeout=10000

【讨论】:

  • 您能解释一下为什么使用connection 有助于解决问题吗?几乎没有解释为什么 OP 需要接受您的解决方案
猜你喜欢
  • 2012-06-08
  • 2014-04-27
  • 2021-02-15
  • 2019-05-01
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 2022-01-04
  • 2017-02-04
相关资源
最近更新 更多