我正在尝试编写一个简单的应用程序,通过使用输入向主题发送消息,并显示在主题上发布的消息。 有两个命令行可执行文件 - 一个用于发布者,另一个用于订阅者。 当我发布关于主题的消息时,我可以看到消息被提交到主题。
以下命令显示主题上有消息(参见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;
}
答案 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;
}
}