Невозможно получить сообщения из темы, используя EMS.NET API
Я пытаюсь написать простое приложение для отправки сообщений в тему с использованием ввода и отображения сообщений, опубликованных по теме. Существует два исполняемых файла командной строки - один для издателя, а другой для подписчика. Когда я публикую сообщения по теме, я вижу, как сообщения отправляются в тему.
Следующая команда показывает, что в теме есть сообщения (см. 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;
}
1 ответ
В моем.NET-коде произошла глупая ошибка. следующий цикл while никогда не возвращается, поэтому возврата нет. Мне нужно разорвать цикл, когда я получаю сообщение. Duh!!!!
while (true)
{
Message msg = subscriber.Receive();
if (msg == null)
{
break;
}
if (msg is TextMessage)
{
TextMessage tm = (TextMessage) msg;
messageFromPublisher = tm.Text;
break;
}
}