Search code examples
azureazureservicebusazure-servicebus-queuesazure-servicebus-topics

Fastest way to know if a BrokeredMessage from Topic will be received by a subscription receiver


I work with azure Topics/Subscriptions for a project. And i want to find the fastest solution to know if a BrokeredMessage will be received by 1 subscription at least.

I found a basic solution : Before to send the message, i call GetRules method to iterate throught sql filters :

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
}

Is there a faster way ?

For example, is there a way to send the message instataneously the message in another queue if he didn't find a receiver to go ?


Solution

  • What you are doing is wrong. Topics are created to decouple publishers and subscribers. Your publisher should not be concerned about the fact if subscribers exist or not. Events are broadcasted, so if no listeners are found, those messages go nowhere.

    There's a setting topic setting, TopicDescription.EnableFilteringMessagesBeforePublishing that when is set to true will throw NoMatchingSubscriptionException exception where there are no subscriptions that would be able to process a message. It is not intended for production.