篩選 MQTT 路由訊息
您可使用事件方格訂用帳戶的篩選功能來篩選路由的 MQTT 訊息。
主題篩選
透過依據雲端事件結構描述中的「主旨」屬性篩選,即可依據訊息的 MQTT 主題進行篩選。 事件方格訂用帳戶藉由指定主旨的起始或結束值,支援免費的簡單主旨篩選。 例如,
- 如果每台車輛在其自己的主題上發佈其位置 (vehicles/vehicle1/gps、vehicles/vehicle2/gps 等等),您可使用篩選條件:主旨以“gps” 結尾,只路由傳送所有位置資訊。
- 如果每個處理站的每個區段的計算機都會發佈模擬處理站階層的主題(例如 Factory1/area2/machine4/telemetry),您可以使用篩選:subject 開頭為 “factory1/area2/” ,僅將屬於 Factory1 和區域 2 的訊息路由傳送至特定端點。 您可複寫此設定,將訊息從其他處理站/區域路由傳送至不同的端點。
您也可利用事件訂用帳戶的進階篩選,透過依據雲端事件結構描述中的主旨屬性篩選,以根據 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}"
}
您可使用下列篩選條件來篩選來自「感應器」類型用戶端的所有訊息:
"advancedFilters": [{"
operatorType": "StringContains",
"key": "clienttype",
"value": "sensor"
}]
後續步驟:
使用下列文章以深入了解路由: