2016-03-15 18 views

回答

0

最後,我得到了這個問題的答案。回答以下步驟。

  1. 在訂閱xml中傳遞SQL過濾器節點,同時在客戶端創建訂閱,如下所示。

@"<entry xmlns=""http://www.w3.org/2005/Atom""> 
 

 
    <title type=""text"">" + SubscriptionName + @"</title> 
 

 
    <content type=""application/xml""> 
 

 
    <SubscriptionDescription xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns=""http://schemas.microsoft.com/netservices/2010/10/servicebus/connect"" > 
 
             \t <DefaultRuleDescription> 
 
      <Filter i:type=""SqlFilter""> 
 
       <SqlExpression>" + "VenueId='" + venueId + "' or CustomerId='" + customerId + @"'</SqlExpression> 
 
       <CompatibilityLevel> 20 </CompatibilityLevel> 
 
      </Filter> 
 
      <Action i:type = ""EmptyRuleAction""/> 
 
      <Name>$Default</Name> 
 
      </DefaultRuleDescription> 
 
     </SubscriptionDescription> 
 
    </content> 
 
      
 
</entry>";

  • WebClient中添加報頭與在SQL過濾器中使用象下面
  • webClient.Headers.Add("CustomerId", customerId); 
     
        webClient.Headers.Add("VenueId", venueId)

    相同名稱

    ;

    1. 創建subscription.this訂閱將被創建並且有一些過濾器。

    2. 在客戶端檢索消息時,也會在webClinet中添加這兩個頭文件。這樣它會收到具有隻對CustomerID濾波器消息和VenueId

    webClient.Headers.Add("CustomerId", customerId); 
     
        webClient.Headers.Add("VenueId", venueId)

    ;

    1. 在發送消息的服務端也添加這兩個頭。所以它會將消息發送給具有這些名稱的過濾器的唯一訂閱。

    webClient.Headers.Add("CustomerId", customerId); 
     
        webClient.Headers.Add("VenueId", venueId)

    ;

    1

    每個主題上的訂閱應該有自己的規則(訂閱),向主題發送消息的客戶端通常不想知道要發送到哪個訂閱。

    如果您確實需要此,嘗試是這樣的:

    Client -> Topic | Subscription 1 | * 
           | Subscription 2 | properties.customername = "A" 
           | Subscription 3 | properties.customername = "B" 
           | Subscription 4 | properties.special = "123" 
    

    要發送消息到只有一個訂閱,確保所有訂閱有一個唯一的訂閱。在上面的例子中,認購1收到的所有郵件,這樣這個改變的東西:

    Client -> Topic | Subscription 1 | properties.customername EXISTS 
           | Subscription 2 | properties.customername = "A" 
           | Subscription 3 | properties.customername = "B" 
           | Subscription 4 | properties.special = "123" 
    

    更多信息: https://msdn.microsoft.com/library/azure/microsoft.servicebus.messaging.sqlfilter.sqlexpression.aspx

    另一個解決辦法是創建一個單獨的話題來處理這個問題,並在此主題可以將所有其他請求轉發給您的常規主題。 (可以鏈接主題來創建此行爲) https://azure.microsoft.com/en-us/documentation/articles/service-bus-auto-forwarding/

    相關問題