Поделиться через


Фильтрация перенаправленных сообщений MQTT

Вы можете использовать возможность фильтрации подписки сетки событий для фильтрации перенаправленных сообщений MQTT.

Фильтрация разделов

Вы можете отфильтровать разделы MQTT сообщений, отфильтровав свойство subject в схеме Cloud Event. Подписки сетки событий поддерживают бесплатную фильтрацию субъектов, указав начальное или конечное значение для субъекта. Например,

  • Если каждое транспортное средство публикует свое расположение по своей собственной теме (транспортных средств/транспортных средств1/gps, транспортных средств/транспортных средств2/gps и т. д.), вы можете использовать фильтр: тема заканчивается "gps" для маршрутизации только всех сообщений о расположении.
  • Если компьютеры из каждого раздела каждой фабрики публикуются по темам, которые имитируют иерархию фабрики (например, factory1/area2/machine4/telemetry), можно использовать фильтр: тема начинается с "factory1/area2/" для маршрутизации только сообщений, принадлежащих facotry1 и области 2 к определенной конечной точке. Эту конфигурацию можно реплика для маршрутизации сообщений из других фабрик или областей в разные конечные точки.

Вы также можете воспользоваться расширенными фильтрами подписки на события для фильтрации на основе раздела MQTT, используя фильтрацию по свойству субъекта в схеме облачных событий. Расширенные фильтры позволяют задавать более сложные фильтры, указывая оператор сравнения, ключ и значение.

Фильтрация полезных данных

Для сообщений MQTT версии 5 типа контента = application/json; charset=utf-8" или индикатор формата полезных данных=1, полезные данные будут пересылаться в объекте данных, и сообщение будет сериализовано как JSON (или строка JSON, если полезные данные не является JSON). Установка типа контента и (или) индикатора формата полезных данных позволяет фильтровать свойства полезных данных как переадресованное в поле данных как есть.

полезные данные JSON

Если вы отправляете полезные данные JSON, он будет сериализован в виде правильного JSON, и вы сможете фильтровать по каждому свойству в JSON, используя расширенную фильтрацию подписки на события.

Например, если вы отправляете следующие полезные данные:

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

С помощью следующего фильтра можно отфильтровать все сообщения со значением температуры более 100:

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

Полезные данные, отличные от JSON

Если вы отправляете полезные данные, отличные от JSON, которые по-прежнему являются UFT-8, она будет сериализована в виде строки 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"
}]

Дальнейшие действия

Дополнительные сведения о маршрутизации см. в следующих статьях:

Краткое руководство.

Основные понятия: