2016-04-11 4 views
1

Я пытаюсь подписаться на тему ActiveMQ из приложения .NET, а ниже - мой код (я использую Apache NMS 1.7.0):Apache NMS на .NET не удается подключиться к 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); 
    } 
} 

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

connection = connectionFactory.CreateConnection(); 

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

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

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

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

+0

Похоже, вы не подключаетесь к брокеру, вы уверены, что в этом порту есть живой брокер, а не что-то еще. –

+0

Да, 'telnet 172.16.126.194 61615' работает как ожидалось. Кроме того, с Java Producer я могу добавить контент в эту тему. – j3d

+0

Что такое конфигурация брокера для этого порта, т. Е. TransportConnector. На самом деле этого недостаточно, чтобы помочь –

ответ

0

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

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

После этого небольшие изменения все работало, как ожидалось.

Смежные вопросы