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

Service Bus Topic订阅消息过滤配置咨询:仅接收Male性别消息

当然可以实现!

Azure Service Bus的订阅本身就支持通过过滤规则筛选特定消息,刚好匹配你只接收Gender为Male的消息需求。下面给你两种常用的实现方案:

方案一:基于消息体JSON结构过滤

如果你的消息内容就是像示例那样嵌套在JSON里,只要确保发布消息时正确设置内容类型,就能直接通过SQL表达式过滤嵌套字段:

  1. 发布消息时配置ContentType
    发布消息时,把ContentType设为application/json,这样Service Bus能解析消息体的JSON结构:

    var jsonPayload = "{ \"Data\" : { \"Name\": \"Johnny Cruz\", \"Gender\": \"Male\" } }";
    var message = new Message(Encoding.UTF8.GetBytes(jsonPayload))
    {
        ContentType = "application/json"
    };
    await topicClient.SendAsync(message);
    
  2. 给订阅添加SQL过滤规则

    • 在Azure门户进入你的Topic对应的订阅页面
    • 找到「过滤规则」选项,点击「添加」
    • 选择「SQL过滤」,在过滤表达式中输入:Data.Gender = 'Male'
    • 保存规则后,这个订阅就只会接收符合条件的消息了

    也可以用代码添加规则:

    var subscriptionClient = new SubscriptionClient(connectionString, topicName, subscriptionName);
    var maleFilter = new SqlFilter("Data.Gender = 'Male'");
    await subscriptionClient.AddRuleAsync("FilterMaleMessages", maleFilter);
    // 记得删除默认的TrueFilter,不然会接收所有消息
    await subscriptionClient.RemoveRuleAsync(RuleDescription.DefaultRuleName);
    

方案二:基于自定义消息属性过滤(推荐)

如果希望过滤性能更高,建议把Gender作为消息的自定义属性传递,这样Service Bus不需要解析整个消息体就能完成过滤:

  1. 发布消息时添加自定义属性

    var jsonPayload = "{ \"Data\" : { \"Name\": \"Johnny Cruz\", \"Gender\": \"Male\" } }";
    var message = new Message(Encoding.UTF8.GetBytes(jsonPayload))
    {
        ContentType = "application/json",
        UserProperties = { { "Gender", "Male" } }
    };
    await topicClient.SendAsync(message);
    
  2. 配置订阅过滤规则
    过滤表达式更简单:Gender = 'Male',不管是门户配置还是代码添加,只需要把表达式换成这个即可。

注意事项

  • 一定要删除订阅默认的TrueFilter规则,不然默认会接收所有消息,你的过滤规则就起不到作用了
  • SQL过滤表达式支持常见的比较操作(=, !=, >, <等),也可以结合逻辑运算符(AND/OR)实现更复杂的过滤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:33:43