知道订阅接收器是否会收到来自主题的 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 异常,其中没有能够处理消息的订阅。它用于生产。