使用Azure Functions应用程序通过CorrelationFilter创建主题筛选器规则

时间:2019-05-07 23:09:15

标签: azure azureservicebus azure-servicebus-topics azure-servicebus-subscriptions

我想通过CorrelationFilter为与主题关联的订阅创建过滤器规则,因为它比SQLFilter快。

规则:任何包含等于字符串的标头的消息将进入一个订阅,另一个字符串将进入不同的订阅。例如:

Topic: order
Subcription1: header_orderType: orderPlaced
Subcription2: header_orderType: orderPaid

类似于下面通过服务总线资源管理器以蓝色突出显示的版本。

enter image description here 以下是可以达到此目的的其他方法。

代码中的SQLFilter https://dzone.com/articles/everything-you-need-know-about-5

SQLFilter https://github.com/Azure/azure-service-bus/tree/master/samples/DotNet/Microsoft.Azure.ServiceBus/TopicFilters

PS https://docs.microsoft.com/en-us/powershell/module/azurerm.servicebus/New-AzureRmServiceBusRule?view=azurermps-6.13.0

1 个答案:

答案 0 :(得分:0)

TopicFilters示例也涵盖了使用ARM模板设置的相关性过滤器。在C#和PS中也应该如此。

C#

您将必须首先创建一个Microsoft.Azure.ServiceBus.CorrelationFilter对象

var orderPlacedFilter = new CorrelationFilter();

filter.Properties["header_orderType"] = "orderPlaced";

然后通过调用Microsoft.Azure.ServiceBus.SubscriptionClient.AddRuleAsync()

将其添加到您的订阅客户端对象中
subsClient.AddRuleAsync("orderPlacedFilter", orderPlacedFilter);

类似地,对于其他订阅及其过滤器。

PowerShell

  

猜猜文档不是真的很出色,但是我相信这应该有用

$rule = New-AzServiceBusRule -ResourceGroupName prvalav-common -Namespace prvalav-common -Topic test -Subscription test -Name SBRule -SqlExpression "test = 0"

$rule.FilterType = 1
$rule.SqlFilter = $null
$rule.CorrelationFilter.Properties["header_orderType"] = "orderPlaced"

Set-AzServiceBusRule -ResourceGroupName prvalav-common -Namespace prvalav-common -Topic test -Subscription test -Name SBRule -InputObject $rule

如果您对FilterType = 1感到疑惑,请检查FilterType枚举。

设置后,在功能应用中,您只需将Service Bus Trigger与主题/订阅详细信息一起使用。