我正在尝试按如下方式收听EMS服务器:
Topic clientTopic = _subscriberSession.CreateTopic(topicName);
TopicSubscriber clientTopicSubscriber = _subscriberSession.CreateSubscriber(clientTopic, selector, true);
clientTopicSubscriber.MessageHandler += new EMSMessageHandler(test_MessageHandler);
但是,当我这样做时,会抛出异常:
TIBCO.EMS.InvalidDestinationException:'不允许创建目的地
我知道EMS已配置为禁用队列和主题创建。但是我只是想听听这个话题。我也试过“CreateConsumer”。我不明白出了什么问题。我只是想听,而不是创建一个队列或主题。你们知道什么是错的吗?
此外,我正在尝试收听的主题存在且已经过验证。
答案 0 :(得分:1)
var context = new LookupContext(environment);
var factory = context.Lookup(config.ConnectionFactory) as ConnectionFactory;
try
{
connectionCorp = factory.CreateConnection();
}
catch {
var connectionFactory = new ConnectionFactory(factory.Url, "Receiver", environment);
connectionCorp = connectionFactory.CreateConnection();
}
connectionCorp.Start();
sessionCorp = connectionCorp.CreateSession(false, SessionMode.ClientAcknowledge);
var queue = context.Lookup(config.Name) as Destination;
if(queue is TIBCO.EMS.Topic)
{
var selector = string.Format("To='{0}' and From='{1}'", config.ToAddress, config.FromAddress);
msgConsumer = sessionCorp.CreateConsumer(queue, selector,false);
msgConsumer.MessageHandler += (sender, args) => {
action(args);
};
}
else
{
msgConsumer = sessionCorp.CreateConsumer(queue);
msgConsumer.MessageHandler += (sender, args) => {
action(args);
};
}
答案 1 :(得分:0)
即使您只是在收听某个主题,默认情况下,您还需要拥有查看任何流量的权限。也只是订阅一个主题需要订阅'权限。
在您的情况下,您可以添加(将foo替换为您的实际客户主题,将user1替换为您的用户名)
TOPIC = foo USER = user1 PERM = subscribe
或者,如果您还不想打扰权限,只需添加'>'将wildcard分成几行topic.conf和queue.conf并重启tibemsd:
>