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 上调用 CloseDispose ,底层连接和它运行的线程仍然存在。 根据您的实现,这可能意味着内存泄漏。

【讨论】:

好收获。现在我不得不像这样实现它,因为我知道存在泄漏的可能性。还没找到更好的方法。【参考方案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 没有问题

activemq连接过多导致变慢

Android调试器不断断开连接

连接wifi后十几秒后自动断开?

PC Kinect 使用 Brekel 进行动画 5 秒后断开连接。

activemq artemis关于 Apache.NMS.AMQP 使用注意事项。