Я пытаюсь написать простое приложение для отправки сообщений в тему из ввода ввода и отображения сообщений, опубликованных по теме. Есть два исполняемых файла командной строки: один для издателя и другой для подписчика. Когда я публикую сообщения по теме, я могу видеть сообщения, отправленные на эту тему.Не удалось получить сообщения из темы с помощью API EMS.NET
Следующая команда показывает, что есть сообщения по этой теме (см F1.gif): -
show stat EMS.Test.Topic
Следующая команда показывает, что сообщения становятся потребляемый абонентами (см F2.gif)
show stat consumers topic=EMS.Test.Topic
Однако я не могу получить сообщения EMS .NET API. Он застревает на Message msg = subscriber.Receive();
. Я убедился, что детали подключения и данные аутентификации верны, потому что они используются при публикации сообщений.
public string ReceiveMessagesFromTopic(string topicName)
{
TopicConnection connection = null;
string messageFromPublisher = string.Empty;
try
{
var factory = new TIBCO.EMS.TopicConnectionFactory(serverUrl);
connection = factory.CreateTopicConnection(userName, password);
TopicSession session = connection.CreateTopicSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.CreateTopic(topicName);
TopicSubscriber subscriber = session.CreateSubscriber(topic);
connection.Start();
while (true)
{
Message msg = subscriber.Receive();
if (msg == null)
{
break;
}
if (msg is TextMessage)
{
TextMessage tm = (TextMessage) msg;
messageFromPublisher = tm.Text;
}
}
connection.Close();
}
catch (EMSException e)
{
if (connection!=null)
{
connection.Close();
}
throw;
}
return messageFromPublisher;
}
привет, даже для меня контроль останавливается у подписчика. он не переходит в строку if (msg == null). если в теме нет сообщений, тогда элемент управления не переходит к следующей строке. поэтому интересно, если выше правильное решение ... – user1447718