0

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

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

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

类似于下面通过 Service Bus Explorer 以蓝色突出显示的那个。

在此处输入图像描述 以下是可以实现这一目标的其他方法。

代码中的 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

4

1 回答 1

3

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);

同样,对于其他订阅及其过滤器。

电源外壳

猜猜这个文档不是很好,但我相信这应该有效

$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枚举。

设置好之后,在您的函数应用中,您只需将服务总线触发器与主题/订阅详细信息一起使用。

于 2019-05-13T16:32:52.383 回答