
# 订阅筛选策略使用样例
#### 操作场景
本文主要介绍在添加订阅时如何配置订阅筛选策略，用于限定消息发布范围。订阅筛选策略应用于消息属性。当订阅者设置了筛选策略，且发布消息时设置了消息属性，则在消息发布时会根据订阅筛选策略判断消息是否推送给订阅者。
本示例筛选属性采用企业团队、职位岗位维度：
- company：企业团队（group_a、group_b、group_c）
- position：职位岗位（admin：运维管理员、finance：财务、dev：研发、ops：运维）
 
#### 前提条件
已完成主题创建。详细操作步骤请参考[创建主题](https://support.huaweicloud.com/usermanual-smn/zh-cn_topic_0043961401.html)。
#### 添加订阅
在已创建的主题下添加以下两种订阅。添加订阅详细操作步骤请参见[订阅主题](https://support.huaweicloud.com/usermanual-smn/zh-cn_topic_0043961402.html)。
- 用户在主题下添加订阅终端A，设置团队group_a、group_b的财务\&研发人员，仅接收finance、dev消息。则用户可以在创建订阅A时配置如下订阅筛选策略：
  ```
  {
      "filter_polices":[
          {
              "name":"company",
              "string_equals":[
                  "group_a",
                  "group_b"
              ]
          },
          {
              "name":"position",
              "string_equals":[
                  "finance",
                  "dev"
              ]
          }
      ]
  }
  ```
  
- 用户在主题下添加订阅终端B，设置团队group_b、group_c的运维管理员，仅接收admin、ops岗位告警通知。则用户在创建订阅B时配置如下订阅筛选策略：
  ```
  {
      "filter_polices":[
          {
              "name":"company",
              "string_equals":[
                  "group_b",
                  "group_c"
              ]
          },
          {
              "name":"position",
              "string_equals":[
                  "admin",
                  "ops"
              ]
          }
      ]
  }
  ```
  
 
#### 发布消息
向已创建的主题发布消息，根据添加的不同订阅，会出现以下场景。
发布消息详细操作步骤请参见[发布主题消息简介](https://support.huaweicloud.com/usermanual-smn/zh-cn_topic_0044170758.html)。
- 场景一： 消息属性字段为：
  ```
  {
      "name":"company",
      "type":"STRING",
      "value":[
          "group_a"
      ]
  }
  ```
  发送结果：在消息中只规定了消息属性字段中的company字段，而没有规定position字段，因此本条消息只会发送给订阅A。
  
- 场景二： 消息属性字段为：
  ```
  [
      {
          "name":"company",
          "type":"STRING",
          "value":[
              "group_a"
          ]
      },
      {
          "name":"position",
          "type":"STRING",
          "value":[
              "ops"
          ]
      }
  ]
  ```
  发送结果：此条消息含义为发送给group_a、岗位为运维的订阅者；订阅A和订阅B均不符合条件。因此本条消息不会发送给订阅A和订阅B。
  
- 场景三： 消息属性字段为：
  ```
  [
      {
          "name":"company",
          "type":"STRING",
          "value":[
              "group_c"
          ]
      },
      {
          "name":"position",
          "type":"STRING",
          "value":[
              "admin"
          ]
      }
  ]
  ```
  发送结果：此条消息含义为发送给group_c，岗位为运维管理员的订阅者，订阅A不符合条件，完全匹配订阅B。因此本条消息只发送给订阅B。
  
- 场景四： 消息属性字段为：
  ```
  [
      {
          "name":"company",
          "type":"STRING",
          "value":[
              "group_b"
          ]
      },
      {
          "name":"position",
          "type":"STRING",
          "value":[
              "finance"
          ]
      }
  ]
  ```
  发送结果：此条消息含义为发送给group_b、岗位为财务通知，订阅A符合条件，订阅B不符合条件。因此本条消息不会发送给订阅B。
  
- 场景五： 消息属性字段为：
  ```
  [
      {
          "name":"company",
          "type":"STRING_ARRAY",
          "value":[
              "group_a",
              "group_b",
              "group_c"
          ]
      },
      {
          "name":"position",
          "type":"STRING_ARRAY",
          "value":[
              "dev",
              "ops"
          ]
      }
  ]
  ```
  发送结果：此条消息覆盖所有团队，同时包含研发、运维岗位，订阅A和订阅B均符合条件。因此本条消息会发送给订阅A和订阅B。
  
- 场景六： 订阅筛选策略字段没有配置。
  发送结果：带有任何非协议类型消息属性的消息不会发送给未配置订阅筛选策略的订阅。
  
- 场景七： 订阅筛选策略字段没有配置且未带有消息属性字段。
  发送结果：消息正常发送给所有订阅。
  
 
