Apache NMS в.NET не может подключиться к ActiveMQ [Канал был неактивен слишком долго]

Я пытаюсь подписаться на тему ActiveMQ из приложения.NET, и здесь ниже мой код (я использую Apache NMS 1.7.0):

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);
    }
}

Приведенный выше код успешно компилируется... но попытка подключиться к серверу ActiveMQ не удалась. Здесь ниже утверждение, которое терпит неудачу...

connection = connectionFactory.CreateConnection(); 

... и вот сообщение об ошибке:

Channel was inactive for too long: tcp://172.16.126.194:61615

Я немного запутался, поскольку получаю эту ошибку, даже если мой клиент впервые пытается подключиться к серверу ActiveMQ.

Я также пытался установить wireformat.maxinactivityduration=0, но никак. Любая помощь могла бы быть полезна.

2 ответа

В моем случае я использовал неправильный номер порта для доступа к брокеру. Мне пришлось использовать безопасный порт 61616.

В нашем случае порт 61615 является безопасным портом... поэтому мне просто нужно было изменить строку подключения следующим образом:

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

После этой небольшой модификации все заработало как положено.

Другие вопросы по тегам