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

相关问题