You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python创建Azure Service Bus订阅过滤器及管理规则

Azure Service Bus 规则与过滤器问题解决

1. 查看过滤器的具体信息

遍历规则时直接打印过滤器对象只会显示内存地址,需通过类型判断和属性访问获取详细信息:

from azure.servicebus.management import ServiceBusAdministrationClient, CorrelationRuleFilter, SqlRuleFilter

CONNECTION_STR = "你的连接字符串"
TOPIC_NAME = "目标主题名"
SUBSCRIPTION_NAME = "目标订阅名"

servicebus_mgmt_client = ServiceBusAdministrationClient.from_connection_string(CONNECTION_STR)

for rule_properties in servicebus_mgmt_client.list_rules(TOPIC_NAME, SUBSCRIPTION_NAME):
    print(f"规则名称: {rule_properties.name}")
    filter_obj = rule_properties.filter
    
    # 获取过滤器类型
    filter_type = type(filter_obj).__name__
    print(f"过滤器类型: {filter_type}")
    
    # 解析CorrelationRuleFilter的详细信息
    if isinstance(filter_obj, CorrelationRuleFilter):
        # 输出内置关联属性
        print(f"关联ID: {filter_obj.correlation_id}")
        print(f"消息ID: {filter_obj.message_id}")
        print(f"目标地址: {filter_obj.to}")
        # 输出自定义属性键值对
        print("自定义属性:")
        for key, value in filter_obj.properties.items():
            print(f"  {key}: {value}")
    
    # 解析SqlRuleFilter的详细信息(如果涉及SQL过滤场景)
    elif isinstance(filter_obj, SqlRuleFilter):
        print(f"SQL过滤表达式: {filter_obj.sql_expression}")
    
    print(f"创建时间: {rule_properties.created_at_utc}")
    print("---")

执行后会输出过滤器的类型(如CorrelationRuleFilter)、内置属性以及所有自定义键值对。

2. 创建规则(含CorrelationRuleFilter)

create_rule方法需指定规则名称、过滤器实例,可选添加规则动作,正确语法示例如下:

基础用法:创建带CorrelationRuleFilter的规则

# 初始化CorrelationRuleFilter,设置内置关联属性
my_filter = CorrelationRuleFilter(
    correlation_id="vip_customer",
    message_id="order_*"
)
# 添加自定义过滤属性
my_filter.properties["customer_level"] = "vip"
my_filter.properties["order_region"] = "north"

# 调用create_rule创建规则
servicebus_mgmt_client.create_rule(
    topic_name=TOPIC_NAME,
    subscription_name=SUBSCRIPTION_NAME,
    rule_name="vip_customer_rule",  # 必须指定规则名称
    filter=my_filter
)

进阶用法:创建带规则动作的规则

如果需要在匹配后修改消息属性,可搭配SqlRuleAction:

from azure.servicebus.management import SqlRuleAction

# 定义规则动作:给匹配的消息添加处理标记
my_action = SqlRuleAction(sql_expression="SET IsProcessed = 'True'")

# 创建带动作的规则
servicebus_mgmt_client.create_rule(
    topic_name=TOPIC_NAME,
    subscription_name=SUBSCRIPTION_NAME,
    rule_name="vip_customer_rule_with_action",
    filter=my_filter,
    action=my_action
)

注意:create_rule的rule_name参数为必填项,遗漏会导致调用失败。

内容的提问来源于stack exchange,提问作者Mixie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:28:14