你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

MQTT 路由消息筛选

可以使用事件网格订阅的筛选功能来筛选路由的 MQTT 消息。

主题筛选

可以根据云事件架构中的“subject”属性进行筛选,以筛选消息的 MQTT 主题。 事件网格订阅通过指定主题的起始值或结束值,来支持简单任意的主题筛选。 例如,

  • 如果每辆汽车在其自身的主题(vehicles/vehicle1/gps、vehicles/vehicle2/gps 等)上发布其位置,则你可以使用筛选器 subject ends with "gps" 来仅路由所有位置消息。
  • 如果每间工厂中每个区域的机器都在模拟工厂层次结构的主题(例如 factory1/area2/machine4/telemetry)上发布,你可以使用筛选器 subject begins with "factory1/area2/" 来仅将属于 facotry1 和 area2 的消息路由到特定终结点。 可以复制此配置,以将来自其他工厂/区域的消息路由到不同的终结点。

还可以利用事件订阅的高级筛选,以云事件架构中的主题属性为依据基于 MQTT 主题进行筛选。 高级筛选器允许通过指定比较运算符、键和值来设置较复杂的筛选器。

有效负载筛选

对于内容类型为“application/json; charset=utf-8”或有效负载格式指示符为 1 的 MQTT v5 消息,有效负载将在数据对象中转发,消息将序列化为 JSON(如果有效负载不是 JSON,则序列化为 JSON 字符串)。 通过设置内容类型和/或有效负载格式指示符,可以按原样根据数据字段中转发的有效负载属性进行筛选。

JSON 有效负载

如果发送 JSON 有效负载,该有效负载将序列化为适当的 JSON,并且你可以使用事件订阅的高级筛选来根据 JSON 中的每个属性进行筛选。

例如:如果发送以下有效负载:

{
	"Temp": 70,
	"humidity": 40
}

可以使用以下筛选器根据超过 100 的温度值筛选所有消息:

"advancedFilters": [{
    "operatorType": "NumberGreaterThan",
    "key": "data.Temp",
    "value": 100
}]

非 JSON 有效负载

如果发送仍然采用 UFT-8 格式的非 JSON 有效负载,该有效负载将序列化为 JSON 字符串。 例如,如果发送以下有效负载:

{
	Hello Contoso.
}

可以使用以下筛选器筛选包含“Contoso”一词的所有消息:

"advancedFilters": [{
    "operatorType": "StringContains",
    "key": "data",
    "value": "Contoso"
}]

扩充筛选

扩充将添加到路由的 CloudEvent 的属性,你可以使用事件订阅的高级筛选对其进行筛选。

例如,如果添加了以下扩充:

{
	"key": "clienttype",
	"value": "${client.attributes.type}"
}

可以使用以下筛选器筛选来自类型为“sensor”的客户端的所有消息:

"advancedFilters": [{"
    operatorType": "StringContains",
    "key": "clienttype", 
    "value": "sensor"
}]

后续步骤:

使用以下文章详细了解路由:

快速入门:

概念: