Невозможно получить сообщения из темы, используя 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;
         }

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