ActiveMq NMS 大约 30 秒后断开连接
Posted
技术标签:
【中文标题】ActiveMq NMS 大约 30 秒后断开连接【英文标题】:ActiveMq NMS Disconnects after about 30 seconds 【发布时间】:2011-01-05 14:33:28 【问题描述】:正在尝试使用 ActiveMq 进行简单的发布/订阅。我可以让它一切正常,但订阅者在大约 30 秒后断开连接。我一直在寻找可以更改的超时类型值,但似乎没有任何效果。这是订阅者:
using System;
using Apache.NMS;
using Apache.NMS.ActiveMQ;
using Apache.NMS.ActiveMQ.Commands;
namespace ActiveMQCatcher
internal class Program
private static void Main(string[] args)
IConnectionFactory factory = new ConnectionFactory("tcp://localhost:61616/");
using (IConnection connection = factory.CreateConnection())
connection.ClientId = "MYID";
connection.Start();
using (ISession session = connection.CreateSession())
IMessageConsumer consumer = session.CreateConsumer(new ActiveMQTopic("MYTOPIC"), null, false);
consumer.Listener += consumer_Listener;
Console.ReadLine();
connection.Stop();
private static void consumer_Listener(IMessage message)
Console.WriteLine("Got: " + ((ITextMessage) message).Text);
我试过了:
connection.RequestTimeout = TimeSpan.MaxValue;
但它似乎并没有改变任何东西。
要解决问题,只需运行程序并等待大约 30 秒。您可以在 ActiveMQ 控制台中看到连接消失(默认为http://localhost:8161/admin/connections.jsp)
有什么想法吗?
【问题讨论】:
【参考方案1】:当然,我在发布问题后几分钟就知道了。这是其他人的答案:
问题是 NMS 使用的是 OpenWire,而 OpenWire 默认有 30 秒的超时。您可以在 \conf\ActiveMq.xml 文件中更改它。以下是您需要更改的内容:
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?wireFormat.maxInactivityDuration=0"/>
</transportConnectors>
wireFormat.maxInactivityDuration 参数是关键。
【讨论】:
你在哪里发现 OpenWire 有 30 秒超时?【参考方案2】:警告!
看来,如果您设置maxInactivityDuration=0
,那么套接字永远不会死。
即使您在 IConnection
上调用 Close
和 Dispose
,底层连接和它运行的线程仍然存在。
根据您的实现,这可能意味着内存泄漏。
【讨论】:
好收获。现在我不得不像这样实现它,因为我知道存在泄漏的可能性。还没找到更好的方法。【参考方案3】:不确定是答案还是更多的问题(或两个;),
但是在我们的 NMS 使用中,我们指定了 wireFormat.MaxInactivityDuration=-1 在连接 url 的客户端。
似乎有相同的效果,但我们应该使用“-1”还是“0”...?? 不知道,有什么区别...
另外,有趣的是,不知何故,我们没有在服务器配置上指定任何内容,但我们所有的 JAVA 应用程序连接似乎都保持连接(是不是因为 JAVA 客户端对 OpenWire config.params 或 smtng 使用了不同的默认值?)
【讨论】:
好的,我发现“-1”和“0”一样activemq.apache.org/configuring-wire-formats.html【参考方案4】:听起来您使用的是旧版本的 NMS,请尝试更新到最新版本 (1.5.5),此问题应该会消失。在过去的几个版本中,有几个与故障转移和不活动监视器相关的问题都已解决。最新版本已经很好地强化了。
蒂姆 Fusesource.com
【讨论】:
以上是关于ActiveMq NMS 大约 30 秒后断开连接的主要内容,如果未能解决你的问题,请参考以下文章
gatttool 和 bluepy 断开连接,bluetoothctl 没有问题