.NET上的Apache NMS无法连接到ActiveMQ [频道长时间处于非活动状态]

时间:2016-04-11 18:13:14

标签: c# .net activemq apache-nms

我尝试从.NET应用程序订阅ActiveMQ主题,下面是我的代码(我使用的是Apache NMS 1.7.0):

Intent myIntent = new Intent(context, NewsDetails.class);

上面的代码编译成功...但是连接到ActiveMQ服务器的尝试失败。以下是失败的陈述......

using Apache.NMS;
using Apache.NMS.ActiveMQ;
...

public void Start()
{
    try {
        // connect to ActiveMQ
        long timestamp = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
        string providerUrl = String.Format("tcp://{0}:{1}", Host, Port);
        IConnectionFactory connectionFactory = new ConnectionFactory(providerUrl);

        connection = connectionFactory.CreateConnection(); // fails here
        connection.ClientId = String.Format("{0}/{1}/{2}", AssemblyInfo.Title, Username, timestamp);
        connection.Start();

        // create consumer and register callback for incoming messages
        ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
        IMessageConsumer messageConsumer = session.CreateConsumer(
            new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic(TopicName), MessageSelector, false
        );

        messageConsumer.Listener += new MessageListener(OnMessage);
    } catch (Exception e) {
       _.Logger.Error(Resources.ErrorStartingConsumer, e.Message);
    }
}

public void OnMessage(IMessage message)
{
    if (!(message is ITextMessage)) {
        // 'message' is not a text message
        _.Logger.Warn(Resources.SkippedMessage, message.NMSMessageId);
    } else {
        string textMessage = (message as ITextMessage).Text;
        foreach (string acceptedProtocol in AcceptedProtocols) {
            if (textMessage.StartsWith(acceptedProtocol + ":")) {
                // process message here
                return;
            }
        }

        // the url contained in 'message' is not supported
        _.Logger.Warn(Resources.SkippedMessage, message.NMSMessageId);
    }
}

...这是错误信息:

connection = connectionFactory.CreateConnection(); 

我有点困惑,因为即使我的客户端第一次尝试连接ActiveMQ服务器,我也会收到此错误。

我还尝试设置Channel was inactive for too long: tcp://172.16.126.194:61615 ,但没办法。任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:1)

在我们的例子中,端口61615是一个安全端口...所以我只需要像这样修改连接字符串:

    string providerUrl = String.Format("ssl://{0}:{1}", Host, Port);

经过这次小修改后,一切都按预期进行。

答案 1 :(得分:0)

就我而言,我使用了错误的端口号来访问代理。我必须使用安全端口61616。