如何在Azure Function中为Azure Service Bus主题订阅添加SQL Filter
Azure Service Bus主题订阅SQL Filter配置方法
Azure Service Bus的订阅过滤规则属于Service Bus资源的配置项,无需修改Azure Function代码,仅需在Service Bus侧完成规则配置即可,操作方法如下:
- 方法1:Azure Portal可视化配置(对应你截图中的操作)
- 进入你的Azure Service Bus命名空间,找到名称为
send-not的主题 - 进入主题详情页后,在左侧导航栏选择「订阅」,依次点击需要配置的订阅(
send-idea、send-email)进入单独配置页 - 在订阅详情页左侧导航栏选择「过滤规则」
- 先删除默认的
$Default规则(该规则默认SQL表达式为1=1,会匹配所有消息) - 点击「+ 添加」,规则类型选择SQL Filter,填写自定义规则名称,在SQL表达式框中填写你需要的过滤逻辑,比如按自定义消息属性区分的场景可填写
messageType = 'email'(对应send-email订阅)、messageType = 'idea'(对应send-idea订阅) - 保存规则即可生效
- 进入你的Azure Service Bus命名空间,找到名称为
- 方法2:Azure CLI命令行配置(适合自动化部署场景)
示例命令如下,替换尖括号内的参数为你实际的资源信息即可:# 配置send-email订阅过滤规则 # 删除默认规则 az servicebus topic subscription rule delete --resource-group <你的资源组名称> --namespace-name <Service Bus命名空间名称> --topic-name send-not --subscription-name send-email --name \$Default # 添加SQL过滤规则 az servicebus topic subscription rule create --resource-group <你的资源组名称> --namespace-name <Service Bus命名空间名称> --topic-name send-not --subscription-name send-email --name emailFilter --filter-sql-expression "messageType = 'email'" # 配置send-idea订阅过滤规则 az servicebus topic subscription rule delete --resource-group <你的资源组名称> --namespace-name <Service Bus命名空间名称> --topic-name send-not --subscription-name send-idea --name \$Default az servicebus topic subscription rule create --resource-group <你的资源组名称> --namespace-name <Service Bus命名空间名称> --topic-name send-not --subscription-name send-idea --name ideaFilter --filter-sql-expression "messageType = 'idea'" - 配套消息发送要求
过滤规则配置完成后,你需要在发送消息到send-not主题时,给消息添加对应的自定义属性,示例C#发送代码如下:ServiceBusSender sender = serviceBusClient.CreateSender("send-not"); // 发送邮件类型消息 ServiceBusMessage emailMsg = new ServiceBusMessage("邮件通知内容"); emailMsg.ApplicationProperties.Add("messageType", "email"); await sender.SendMessageAsync(emailMsg); // 发送idea类型消息 ServiceBusMessage ideaMsg = new ServiceBusMessage("idea通知内容"); ideaMsg.ApplicationProperties.Add("messageType", "idea"); await sender.SendMessageAsync(ideaMsg);
配置完成后,订阅仅会接收匹配SQL规则的消息,原有Azure Function的Service Bus触发器绑定无需做任何修改。
内容的提问来源于stack exchange,提问作者Ireal
相关产品推荐
相关产品推荐

