繁体   English   中英

ActiveMq NMS在大约30秒后断开连接

[英]ActiveMq NMS Disconnects after about 30 seconds

我试图用ActiveMq做简单的pub / sub。 我可以完全正常工作,但是用户在大约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

有任何想法吗?

当然,我在发布问题后几分钟就弄明白了。 以下是其他人的答案:

问题是NMS正在使用OpenWire,默认情况下OpenWire有30秒超时。 您可以在\\ conf \\ ActiveMq.xml文件中更改此设置。 以下是您需要更改的内容:

<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?wireFormat.maxInactivityDuration=0"/>
</transportConnectors>

那个wireFormat.maxInactivityDuration参数是关键。

警告! 看来,如果你设置maxInactivityDuration=0那么套接字永远不会死掉。 即使您在IConnection上调用CloseDispose ,底层连接及其运行的线程仍然存在。 根据您的实现,这可能意味着内存泄漏。

听起来你正在使用旧版本的NMS,尝试更新到最新版本(1.5.5),这个问题应该消失。 有几个与故障转移和非活动监视器相关的问题已在最近几个版本中得到解决。 最新版本非常强硬。

Tim Fusesource.com

不确定这是一个答案还是一个问题(或两个;),

但是在我们的NMS使用中,我们在连接url的客户端指定了wireFormat.MaxInactivityDuration = -1。

似乎有相同的效果,但我们应该使用“-1”还是“0”......? 不知道,有什么区别......

另外,有趣的是,我们不会在服务器配置上指定任何内容,但我们所有的JAVA应用程序连接似乎都保持连接(是因为JAVA客户端使用不同的默认OpenWire config.params或smtng?)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM