知道订阅接收器是否会收到来自主题的 BrokeredMessage 的最快方法
Fastest way to know if a BrokeredMessage from Topic will be received by a subscription receiver
我在一个项目中使用 azure Topics/Subscriptions。
我想找到最快的解决方案,以了解是否至少有 1 个订阅会收到 BrokeredMessage。
我找到了一个基本的解决方案:
在发送消息之前,我调用 GetRules 方法遍历 sql 个过滤器:
var rules = NamespaceMgr.GetRules("topict1", s.Name);
foreach (var ruleDescription in rules)
{
Console.Write(ruleDescription.Name);
var filter = ruleDescription.Filter as SqlFilter;
if(filter != null)
{
expressions.Add(filter.SqlExpression);
}
//...examine exisitngs expressions to know if the message will be handled by a subscription receiver
}
有没有更快的方法?
例如,如果他没有找到要发送的接收者,是否有办法将消息立即发送到另一个队列中的消息?
你的做法是错误的。创建主题是为了分离发布者和订阅者。您的发布者不应该关心订阅者是否存在这一事实。事件是广播的,因此如果找不到侦听器,这些消息将无处可去。
有一个设置主题设置,TopicDescription.EnableFilteringMessagesBeforePublishing
当设置为 true
时将抛出 NoMatchingSubscriptionException
异常,其中没有能够处理消息的订阅。它不用于生产。
我在一个项目中使用 azure Topics/Subscriptions。 我想找到最快的解决方案,以了解是否至少有 1 个订阅会收到 BrokeredMessage。
我找到了一个基本的解决方案: 在发送消息之前,我调用 GetRules 方法遍历 sql 个过滤器:
var rules = NamespaceMgr.GetRules("topict1", s.Name);
foreach (var ruleDescription in rules)
{
Console.Write(ruleDescription.Name);
var filter = ruleDescription.Filter as SqlFilter;
if(filter != null)
{
expressions.Add(filter.SqlExpression);
}
//...examine exisitngs expressions to know if the message will be handled by a subscription receiver
}
有没有更快的方法?
例如,如果他没有找到要发送的接收者,是否有办法将消息立即发送到另一个队列中的消息?
你的做法是错误的。创建主题是为了分离发布者和订阅者。您的发布者不应该关心订阅者是否存在这一事实。事件是广播的,因此如果找不到侦听器,这些消息将无处可去。
有一个设置主题设置,TopicDescription.EnableFilteringMessagesBeforePublishing
当设置为 true
时将抛出 NoMatchingSubscriptionException
异常,其中没有能够处理消息的订阅。它不用于生产。