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