ActiveMQ NMS:当代理关闭时,connection.start() 使用故障转移协议挂起
Posted
技术标签:
【中文标题】ActiveMQ NMS:当代理关闭时,connection.start() 使用故障转移协议挂起【英文标题】:ActiveMQ NMS: connection.start() hangs with Failover protocol when broker is down 【发布时间】:2012-06-08 11:55:59 【问题描述】:我有使用 nms.activemq 1.5.0 的 C# 应用程序。
当我的应用程序启动时,它会尝试使用故障转移协议连接到代理(我在主从配置中有两个代理)。
如果两个经纪人都因为connection.start()
而停止了我的应用程序。
我尝试了我在网上找到的所有信息 - 我尝试了故障转移协议的每个属性,还尝试了设置连接超时,尝试了 transport.requesttimeout
。
我也尝试了更新版本的 nms.activemq,但似乎没有任何解决问题的方法。
对可能导致此问题的原因或任何解决方法有任何想法吗?
【问题讨论】:
这很奇怪,但在 1.5.5 版本中,即使在 connection.ClientId 属性分配时它也会挂起(使用故障转移模式),这在 . NET,因为属性应该代表简单、快速、非阻塞的操作。 【参考方案1】:挖掘google结果后发现this thread
Tim Bish 在那里回答开发人员,在 NMS 中有一个前缀 transport.* 需要添加到所有传输属性中。
我原来的 uri 是:
failover://(tcp://A,tcp://B)?randomize=true&startupMaxReconnectAttempts=1&timeout=2000
现在我的 URI 是(注意 transport.* 前缀):
failover://(tcp://A,tcp://B)?transport.randomize=true&transport.startupMaxReconnectAttempts=1&transport.timeout=2000
这是有效的,我处理抛出的异常并继续我的应用程序。
享受
【讨论】:
以上是关于ActiveMQ NMS:当代理关闭时,connection.start() 使用故障转移协议挂起的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# 和 Apache NMS 的 ActiveMQ - 对队列中的消息进行计数
activemq artemis关于 Apache.NMS.AMQP 使用注意事项。