2014-02-27 65 views
1

我使用Azure Service Bus 1.1 (the on premise version)設置訂閱與在Azure的服務總線(內部)沒有匹配的過濾器的消息

我試圖建立一個將收到沒有過濾到郵件訂閱任何其他現有的訂閱。

我有3個控制檯應用程序,一個用於創建主題和訂閱,一個向主題發送消息,另一個從訂閱接收消息。

我還在使用Service Bus Explorer(V2.1)查看我的控制檯應用程序正在發生什麼。

我試圖建立其使用作爲this pagethis page描述該主題的MatchNoneFilterExpression但示例代碼不編譯(?),即所述FilterAction和FilterExpression屬性不在RuleDescription類

  RuleDescription matchNoneRule = new RuleDescription() 
     { 
      FilterAction = new SqlFilterAction("set defer = 'yes';"), 
      FilterExpression = new MatchNoneFilterExpression() 
     }; 
我使用

的RuleDescription類是Microsoft.ServiceBus.dll 它提供以下特性v2.1.0.0,

enter image description here

如何向特定訂閱發送不匹配其他過濾條件的郵件?

回答

2

this page建議設置EnableFilteringMessagesBeforePublishing屬性的主題。

然後,它表明,在將消息發送到這個主題相關的消息將觸發NoMatchingSubscriptionException

我創建我的話題該代碼

var myTopic = new TopicDescription(topicName) 
{ 
    EnableFilteringMessagesBeforePublishing = true 
}; 
namespaceManager.CreateTopic(myTopic); 

我將消息發送到主題這不匹配任何過濾器,我可以捕獲異常並可能重新發送具有匹配過濾器的屬性的消息,例如:

try 
{ 
    topicClient.Send(message); 

    Console.WriteLine(string.Format("Message sent: Id = {0}, Body = {1}", message.MessageId, message.GetBody<string>())); 
} 
catch (NoMatchingSubscriptionException ex) 
{ 
    string messageBody = message.GetBody<string>();       
    BrokeredMessage msg = new BrokeredMessage(messageBody); 
    msg.Properties.Add("Filter", "NoMatch"); 
    foreach (var prop in message.Properties) 
    { 
     msg.Properties.Add(prop.Key, prop.Value); 
    } 
    topicClient.Send(msg); 

    Console.WriteLine("\n NoMatchingSubscriptionException - message resent to NoMatchingSubscription"); 
    Console.WriteLine(string.Format("Message sent: Id = {0}, Body = {1}", msg.MessageId, msg.GetBody<string>())); 
} 
相關問題