Partilhar via


Filtragem de mensagens roteadas MQTT

Você pode usar o recurso de filtragem da Assinatura de Grade de Eventos para filtrar as mensagens MQTT roteadas.

Filtragem de tópicos

Você pode filtrar os tópicos MQTT das mensagens filtrando a propriedade "subject" no esquema Cloud Event. As Subscrições de Grelha de Eventos suportam filtragem de assunto simples e gratuita, especificando um valor inicial ou final para o assunto. Por exemplo,

  • Se cada veículo estiver a publicar a sua localização no seu próprio tópico (veículos/veículo1/gps, veículos/veículo2/gps, etc.), pode usar o filtro: o assunto termina com "gps" para encaminhar apenas todas as mensagens de localização.
  • Se as máquinas de cada seção de cada fábrica estiverem publicando tópicos que imitam a hierarquia de fábrica (por exemplo, factory1/area2/machine4/telemetry), você pode usar o filtro: subject começa com "factory1/area2/" para rotear apenas as mensagens que pertencem a factory1 e area 2 para um endpoint específico. Você pode replicar essa configuração para rotear mensagens de outras fábricas/áreas para diferentes pontos de extremidade.

Você também pode aproveitar a filtragem avançada da Assinatura de Eventos para filtrar com base no tópico MQTT por meio da filtragem na propriedade subject no Cloud Event Schema. Os filtros avançados permitem definir filtros mais complexos especificando um operador de comparação, uma chave e um valor.

Filtragem de carga útil

Para mensagens MQTT v5 do tipo de conteúdo= "application/json; charset=utf-8" ou de um indicador de formato de carga útil=1, a carga será encaminhada no objeto de dados e a mensagem será serializada como um JSON (ou uma cadeia de caracteres JSON se a carga não for um JSON). Definir o tipo de conteúdo e/ou o indicador de formato de carga útil permite filtrar as propriedades da carga útil conforme é encaminhado dentro do campo de dados como está.

Carga útil JSON

Se você enviar uma carga JSON, ela será serializada como um JSON adequado e você poderá filtrar cada propriedade em seu JSON, usando a filtragem avançada da Assinatura de Eventos.

Por exemplo: se enviar a seguinte carga:

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

Você pode usar o seguinte filtro para filtrar todas as mensagens com valor de temperatura acima de 100:

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

Carga útil não JSON

Se você enviar uma carga não JSON que ainda seja UFT-8, ela será serializada como uma cadeia de caracteres JSON. Por exemplo, se você enviar a seguinte carga:

{
	Hello Contoso.
}

Você pode usar o seguinte filtro para filtrar todas as mensagens que incluem a palavra "Contoso":

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

Filtragem de enriquecimento

Os enriquecimentos são adicionados aos atributos do CloudEvent roteado e você pode filtrá-los usando a filtragem avançada da Event Subscription.

Por exemplo, se você adicionou o seguinte enriquecimento:

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

Você pode usar o seguinte filtro para filtrar todas as mensagens provenientes de seus clientes do tipo "sensor":

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

Passos seguintes:

Use os seguintes artigos para saber mais sobre roteamento:

Início rápido:

Conceitos: