Condividi tramite


Indirizzare i messaggi a diversi argomenti nei grafici del flusso di dati

Importante

Questa pagina include istruzioni per la gestione dei componenti Azure IoT Operations usando i manifesti di distribuzione kubernetes, disponibile in ANTEPRIMA. Questa funzionalità viene fornita con diverse limitazioni e non deve essere usata per i carichi di lavoro di produzione.

Consultare i Termini supplementari di utilizzo per le anteprime di Microsoft Azure per i termini legali applicabili alle funzionalità di Azure in versione beta, anteprima o non ancora rilasciate in versione generale.

Alcuni scenari richiedono l'arrivo di messaggi su argomenti MQTT diversi a seconda del contenuto. Ad esempio, le letture dei sensori al di sopra di una soglia critica devono passare a un alerts topic, mentre le letture normali passano a un historian topic. Con i grafici del flusso di dati, è possibile impostare l'argomento di output in modo dinamico, anche se il flusso di dati ha una singola destinazione.

Come funziona

Una trasformazione mappa può scrivere nei metadati dei messaggi, incluso l'argomento MQTT, usando il $metadata.topic percorso di output. Quindi, la destinazione usa la variabile ${outputTopic} per pubblicare in qualsiasi argomento impostato dalla trasformazione.

Due pezzi interagiscono:

  1. All'interno della trasformazione: una regola della mappa scrive un valore stringa in $metadata.topic.
  2. Nella destinazione: il campo dataDestination si riferisce a ${outputTopic}, che viene risolto nel valore scritto dalla trasformazione.

Opzione 1: Trasformazione mappa singola con un'espressione condizionale

L'approccio più semplice utilizza una trasformazione della mappa con un'espressione if che seleziona l'argomento.

Nell'esperienza Operazioni creare un grafico del flusso di dati:

  1. Aggiungere una sorgente che legga da sensors/temperature.
  2. Aggiungere una trasformazione mappa con due regole:
    • Regola di trasmissione diretta con caratteri jolly (input *, output *).
    • Regola di calcolo con input temperature, output $metadata.topiced espressione if($1 > 1000, "alerts", "historian").
  3. Aggiungere una destinazione con l'argomento factory/${outputTopic}.

Quando la trasformazione della mappa scrive "alerts" in $metadata.topic, la destinazione risolve factory/${outputTopic} in factory/alerts.

Opzione 2: Diramarsi, mappare ogni percorso e unire i rami

Se sono necessarie trasformazioni diverse in ogni percorso (non solo un argomento diverso), usare una trasformazione di ramo per suddividere il flusso, una trasformazione mappa in ogni ramo per impostare l'argomento e applicare regole specifiche del percorso e una trasformazione di concatenazione per unire i percorsi.

Nell'esperienza operativa:

  1. Aggiungere una sorgente che legga da sensors/temperature.
  2. Aggiungere una trasformazione di ramo con condizione $1 > 1000 nel temperature campo.
  3. Nel percorso true aggiungere una trasformazione mappa con un pass-through con caratteri jolly e una regola che imposta $metadata.topic su "alerts".
  4. Nel percorso false aggiungere una trasformazione mappa con un pass-through con caratteri jolly e una regola che imposta $metadata.topic su "historian".
  5. Aggiungere una trasformazione concat per unire entrambi i percorsi.
  6. Aggiungere una destinazione con l'argomento factory/${outputTopic}.

Quale opzione scegliere

Considerazione Opzione 1 (singola mappa) Opzione 2 (ramo + mappe)
Semplicità Meno nodi, più semplice da leggere Altri nodi, più espliciti
Indirizzamento basato su argomenti Ideal Funziona, ma più configurazione del necessario
Trasformazioni diverse per percorso È possibile con l'annidato if(), diventa complesso. Naturale: ogni ramo ha regole di mappa proprie
Aggiunta di altri percorsi Chiamate a catena if() Richiede rami annidati

Per semplificare il routing degli argomenti in base a una singola condizione, l'opzione 1 è più semplice. Usare l'opzione 2 quando ogni percorso richiede un'elaborazione diversa rispetto al nome dell'argomento.

Dettagli della traduzione degli argomenti

La ${outputTopic} variabile in dataDestination viene risolta nel valore completo di $metadata.topic come impostato dall'ultima trasformazione nella pipeline. È anche possibile usare segmenti con ${outputTopic.N} (1 indicizzato). Ad esempio, se la trasformazione imposta $metadata.topic su "region/west":

dataDestination Argomento risolto
factory/${outputTopic} factory/region/west
factory/${outputTopic.1} factory/region
factory/${outputTopic.2} factory/west

Se la variabile dell'argomento non può essere risolta (ad esempio, $metadata.topic non è mai stata impostata), il messaggio viene eliminato e viene registrato un errore.

Passaggi successivi