İletileri veri akışı graflarındaki farklı konulara yönlendirme

Bazı senaryolar, iletilerin içeriğine bağlı olarak farklı MQTT konularına ulaşmasını gerektirir. Örneğin, kritik eşiğin üzerindeki algılayıcı okumalarının bir alerts konuya, normal okumaların ise bir historian konuya gitmesi gerekebilir. Veri akışı graflarıyla, veri akışının tek bir hedefi olsa bile çıkış konusunu dinamik olarak ayarlayabilirsiniz.

Nasıl çalışır?

Harita dönüşümü, c0 çıkış yolunu kullanarak MQTT konusu da dahil olmak üzere ileti meta verilerine yazabilir. Hedef daha sonra ${outputTopic} değişkenini kullanarak dönüşüm tarafından belirlenen herhangi bir konuya yayın yapar.

İki parça birlikte çalışır:

  1. Dönüşümün içinde: Eşleme kuralı bir dize değeri $metadata.topic öğesine yazar.
  2. Hedefte: dataDestination alanı, dönüştürmenin yazdığı değere çözümlenen ${outputTopic} öğesine başvurur.

Seçenek 1: Koşullu ifadeyle tek harita dönüşümü

En basit yaklaşım, konuyu seçen bir ifadeyle bir if eşleme dönüşümü kullanır.

İşlemler deneyiminde bir veri akışı grafı oluşturun:

  1. kaynağından okuyan bir sensors/temperature ekleyin.
  2. İki kuralla harita dönüşümü ekleme:
    • Joker karakter geçiş kuralı (giriş *, çıkış *).
    • Giriş temperature, çıkış $metadata.topicve ifade if($1 > 1000, "alerts", "historian")içeren bir işlem kuralı.
  3. konusuyla bir factory/${outputTopic} ekleyin.

Harita dönüştürmesi "alerts" öğesine yazdığında, hedef $metadata.topic'yi factory/${outputTopic} olarak çözümler factory/alerts.

Seçenek 2: Dallan, her yolu haritalandır ve birleştir

Her yolda farklı dönüştürmelere ihtiyacınız varsa (yalnızca farklı bir konu başlığına değil), akışı bölmek için bir dal dönüşümü, konuyu ayarlamak ve yola özgü kurallar uygulamak için her kolda bir eşleme dönüşümü ve yolları birleştirmek için bir birleştirme dönüşümü kullanın.

Operasyon deneyiminde:

  1. kaynağından okuyan bir sensors/temperature ekleyin.
  2. Alana koşul $1 > 1000 içeren bir temperature dönüşümü ekleyin.
  3. Doğru yolda joker karakter geçişine sahip bir harita dönüşümü ekleyin ve $metadata.topic'yi "alerts" olarak ayarlayan bir kural ekleyin.
  4. False yolunda, joker karakter geçişi ve 'yi $metadata.topic olarak ayarlayan bir "historian" dönüşümü ekleyin.
  5. Her iki yolu da birleştirmek için bir birleştirme dönüşümü ekleyin.
  6. konusuyla bir factory/${outputTopic} ekleyin.

Hangi seçeneğin seçileceği

Değerlendirme Seçenek 1 (tek harita) 2. Seçenek (dal + haritalar)
Basitlik Daha az düğüm, okuması daha kolay Daha fazla düğüm, daha açık
Yalnızca konu başlığı yönlendirme Ideal Çalışır, ancak gerektiğinden daha fazla kurulum gerektirir
Yol başına farklı dönüşümler if() ile iç içeyken mümkündür, karmaşıklaşır. Doğal: Her dal kendi harita kurallarına sahiptir
Daha fazla yol ekleme Zincirleme if() çağrılar İç içe dallar gerektirir

Tek bir koşula dayalı basit konu yönlendirmesi için 1. seçenek daha basittir. Her yol, konu adının ötesinde farklı işlemeye ihtiyaç duyduğunda 2. seçeneği kullanın.

Konu çevirisi ayrıntıları

${outputTopic} içindeki dataDestination değişkeni, işlem hattındaki son dönüşüm tarafından ayarlanan $metadata.topic'nin tam değerine dönüştürülür. "${outputTopic.N} etiketiyle birlikte, 1'den başlayan dizinli segmentleri de kullanabilirsiniz." Örneğin, $metadata.topic'ın "region/west" olarak ayarlandığı durumlarda:

dataDestination Çözümlenen konu
factory/${outputTopic} factory/region/west
factory/${outputTopic.1} factory/region
factory/${outputTopic.2} factory/west

Konu değişkeni çözümlenemiyorsa (örneğin, $metadata.topic hiç ayarlanmadı), ileti bırakılır ve bir hata günlüğe kaydedilir.

Sonraki Adımlar