无法使用EMS.NET API从主题检索消息

时间:2013-05-08 15:29:33

标签: tibco-ems ems tibco-topic

我正在尝试编写一个简单的应用程序,通过使用输入向主题发送消息,并显示在主题上发布的消息。 有两个命令行可执行文件 - 一个用于发布者,另一个用于订阅者。 当我发布关于主题的消息时,我可以看到消息被提交到主题。

以下命令显示主题上有消息(参见F1.gif): -

show stat EMS.Test.Topic

enter image description here

以下命令显示订阅者正在使用这些消息(参见F2.gif)

show stat consumers topic=EMS.Test.Topic

enter image description here

但是,我无法检索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 个答案:

答案 0 :(得分:1)

我的.NET代码中存在一个愚蠢的错误。以下while循环永远不会返回,所以没有返回。当我收到消息时,我需要打破while循环。咄!!!!

 while (true)
 {
         Message msg = subscriber.Receive();

         if (msg == null)
         {
             break;
         }
         if (msg is TextMessage)
         {
             TextMessage tm = (TextMessage) msg;
             messageFromPublisher = tm.Text;
             break;
         }

 }