0

只是關於Azure服務總線主題訂閱的問題,是否可以將多個屬性分配給單個訂閱?Azure服務總線主題訂閱,能夠擁有多個sql-filter屬性?

也有可能啓用空值的其中一個屬性?

我想要做的就是能夠使用azure函數來過濾標識符上​​的消息,具體取決於它是否存在。

我還沒有能夠做到這一點只有隊列消息,因爲我無法找到一種方法來插入som類型的元數據。

我的問題的另一個解決方案將是一個單獨的服務總線主題訂閱,其屬性可以接受設置,並在兩個不同的值之間切換,然後我可以過濾。

我想這樣做的原因不是重複一個完整的操作序列,而是在服務總線主題之後插入某種類型的過濾功能。

-------------------- UPDATE -------------------

Ok So有點更新,我在這個問題上取得了一些進展。與此相關的內容的另一問題是:

當我已經發出了促成消息到servicebus主題訂閱與屬性,例如:

message.Properties [「ID」] =「1」;

是否有可能訪問該消息屬性值一些如何? 我知道這可能不會被用於這種方式,但這將爲我打開一扇新門。

+0

不太下面......如果你問在具有多個規則一個訂閱 - 是的,你可以。您也可以創建複雜的SQL過濾器。 –

+0

@SeanFeldman我在這個問題上取得了一些進展,我有一個後續問題,請看更新,謝謝。 – John

回答

0

根據你的描述,我檢查了C#的服務總線客戶端庫,發現通過NamespaceManager.CreateSubscription創建訂閱時,我們只能通過一個FilterRuleDescription與單個過濾器如下:

public SubscriptionDescription CreateSubscription(string topicPath, string name, Filter filter); 
public SubscriptionDescription CreateSubscription(string topicPath, string name, RuleDescription ruleDescription); 

正如Sean Feldman提到創建複雜的SQL過濾器時,我創建了我的應用程序來測試它。你可以參考我的測試如下:

示例消息

var body = "Hello World"; 
var message1 = new BrokeredMessage(body); 
message1.Properties["From"] = "Ian Smith"; 
message1.Properties["MessageId"] = -1; 
message1.Label = null; 

var message2 = new BrokeredMessage("Second message"); 
message2.Properties["From"] = "Alan Smith"; 
message2.Label = "important"; 
message2.Properties["MessageId"] = 2; 

var message3 = new BrokeredMessage("Third message"); 
message3.Properties["From"] = "Kelly Smith"; 
message3.Label = "information"; 
message3.Properties["MessageId"] = 1; 

創建訂閱與篩選

var filter=new SqlFilter("(sys.Label='important' or sys.Label IS NOT NULL) or MessageId<0 or From LIKE '%Smith'"); 
namespaceManager.CreateSubscription(topicName, subName,filter); 

以上訂閱可以收到所有3條消息。有關更多詳細信息,請參閱SQLFilter syntax

UPDATE:

接收消息,你可以利用Subscription​Client.​On​Message並參考下面的代碼片段:

//Processes a message in an event-driven message pump. 
client.OnMessage((receivedMessage)=>{ 
    Console.WriteLine(receivedMessage.Properties['id'].ToString()); 
    receivedMessage.Complete(); //manually mark the message as processed and deleted. 
},new OnMessageOptions(){ 
    AutoComplete=false, 
    MaxConcurrentCalls=5 
}); 
+0

我在這個問題上取得了一些進展,我有一個後續問題,請看更新,謝謝。 – John

+0

是否意味着您要從您的客戶端檢索自定義屬性,例如[訂閱客戶端。在郵件](https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.subscriptionclient.onmessage?view=azureservicebus-4.0.0#Microsoft_ServiceBus_Messaging_SubscriptionClient_OnMessage_System_Action_Microsoft_ServiceBus_Messaging_BrokeredMessage__)或[隊列客戶端。在消息](https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.queueclient.onmessage?view=azureservicebus-4.0.0)? –

+0

我不確定我是否理解你的問題,但可以說我發送消息給主題訂閱,其中「ID」= 1, 等屬性。 message.Properties ['id'] =「1」; 我希望能夠通過我發送給主題訂閱的那個屬性來檢索消息中的值「1」。我有什麼意義嗎? :P @Bruce – John

相關問題