MQTT Temelleri

MQTT Bridge (Köprüleme) Nedir? Tesisler Arasında Yerel ve Bulut Broker'ları Bağlamak

MQTT köprüleme, seçilen topic'leri broker'lar arasında ileterek her tesisin yerel bir broker tutmasını, bulutun ise her şeyi görmesini sağlar. Desenleri, bir Mosquitto bridge yapılandırmasını ve ConnectMQ'ya yönelen bir Node-RED alternatifini öğrenin.

Bir fabrikadaki yerel Mosquitto broker'ın seçilen topic'leri bir bulut MQTT broker'a ilettiği MQTT köprüleme diyagramı
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

MQTT köprüleme (bridging), seçilen topic'lerdeki mesajların bir broker'dan diğerine otomatik olarak akması için iki broker'ı birbirine bağlar. Bu rehberin sonunda bir bridge'in ne zaman mantıklı olduğunu, topic yeniden eşleme ve döngü önlemenin nasıl çalıştığını anlayacak; yerel verileri bir bulut broker'a ileten çalışan bir Mosquitto bridge yapılandırmasına ve bir Node-RED alternatifine sahip olacaksınız.

MQTT Köprüleme Gerçekte Ne Yapar

Bridge özel bir protokol değildir. Bir broker (veya yardımcı bir program) başka bir broker'a sıradan bir MQTT client bağlantısı açar, bir tarafta abone olur ve diğer tarafta yeniden yayınlar. Uzak broker açısından bridge, kullanıcı adı, parolası ve client ID'si olan herhangi bir client'tır.

Bu ayrıntı, onu nasıl kuracağınız açısından önemlidir. ConnectMQ dahil birçok barındırılan broker kendisi dışa doğru bir bridge çalıştırmaz. Bunun yerine bridge'i uçta (edge) çalıştırırsınız: Tesisteki bir Mosquitto örneği veya bir gateway üzerindeki bir Node-RED akışı, bulut broker'a client olarak dışarıya doğru bağlanır. Tesisin yalnızca 8883 portunda giden erişime ihtiyaç duyması nedeniyle bu, güvenlik duvarı açısından da daha dostane yöndür.

Köprülemenin tipik nedenleri:

  • Yerel özerklik. PLC adaptörleri, HMI'lar ve kontrolörler internet bağlantısı kopsa bile tesis ağındaki bir broker ile konuşmaya devam eder.
  • Seçici dışa aktarım. Her ham sinyal değil, yalnızca toplanmış veya onaylanmış topic'ler tesisten çıkar.
  • Daha az bulut bağlantısı. Yüzlerce yerel cihaz tek bir üst akış bağlantısını paylaşır; bu da sizi bağlantı kotalarının içinde tutar.
  • İsim alanı eşleme. line4/press/temp gibi yerel topic'ler, acme/izmir/line4/press/temp gibi küresel olarak benzersiz bulut topic'lerine dönüşür.

Köprüleme Topolojileri

Topoloji Açıklama Uygun olduğu durum Dikkat edilmesi gereken
Uçtan buluta (out) Yerel broker seçilen topic'leri yukarı iter Telemetri, dashboard'lar, historian'lar Kesintiler sırasında tamponlama
Buluttan uca (in) Bulut komutları tesise iner Ayar noktaları, yapılandırma, OTA tetikleyicileri Kimin komut verebileceğini yetkilendirmek
Çift yönlü Ayrı topic ağaçlarında her iki yön Tam uzaktan işletim Mesaj döngüleri
Hub and spoke Çok sayıda tesis tek bir merkezi broker'a köprülenir Çok tesisli Unified Namespace Tesisler arası topic çakışmaları

Hub-and-spoke deseni birçok Unified Namespace ve Sparkplug B tasarımının omurgasıdır: Her tesis kendi yerel broker'ına sahiptir ve buluttaki kurumsal topic ağacına bir dal katkısında bulunur.

Seçenek 1: Bulut Broker'a Mosquitto Bridge

Eclipse Mosquitto'nun mosquitto.conf içinde yapılandırılan yerleşik bir bridge özelliği vardır. Aşağıdaki örnek, tesis cihazları için 1883 portunda yerel bir broker çalıştırır ve portalda oluşturulan kimlik bilgileriyle 8883 üzerinden TLS ile bir ConnectMQ broker'a köprüler.

# /etc/mosquitto/conf.d/bridge-connectmq.conf

# --- Tesis ağındaki cihazlar için yerel dinleyici ---
listener 1883
# Üretimde password_file ile sıkılaştırın
allow_anonymous true

# --- ConnectMQ'ya (bulut) bridge ---
connection connectmq-cloud
address broker.connectmq.com:8883
bridge_protocol_version mqttv311
bridge_capath /etc/ssl/certs
bridge_insecure false

remote_clientid YOUR_CLIENT_ID
remote_username YOUR_USERNAME
remote_password YOUR_PASSWORD

# QoS 1 mesajlarının kısa yeniden bağlanmalarda korunması için uzak oturumu tut
cleansession false
keepalive_interval 60
restart_timeout 5 60

# Uzak broker Mosquitto değil: özel bridge bayrağını kullanma
try_private false
notifications false

# Üst bağlantı koptuğunda yerel tamponlama
max_queued_messages 10000

# topic <pattern> <direction> <qos> <local-prefix> <remote-prefix>
# Yerel plant/line4/... -> bulut acme/izmir/line4/...
topic # out 1 plant/ acme/izmir/
# Bulut acme/izmir/cmd/... -> yerel cmd/...
topic # in 1 cmd/ acme/izmir/cmd/

Topic satırları şöyle çalışır: Mosquitto deseni (#) alır, yerel aboneliği oluşturmak için başına yerel öneki ekler (plant/#) ve iletirken yerel öneki uzak önekle değiştirir. plant/line4/press/temp üzerindeki yerel bir mesaj bulutta acme/izmir/line4/press/temp olarak görünür. in satırı komutlar için bunun tersini yapar.

Önemli ayarlarla ilgili notlar:

  1. remote_clientid, kimlik bilgilerinizle birlikte verilen client ID olmalıdır. Broker client ID'leri kimlik bilgilerine bağlar; bu yüzden rastgele bir kimlik reddedilir.
  2. try_private false. Mosquitto'nun özel bridge bayrağı Mosquitto'dan Mosquitto'ya bir uzantıdır; diğer broker'lar bunu reddedebilir.
  3. notifications false. Aksi halde Mosquitto bridge durum mesajlarını $SYS/broker/connection/... topic'lerine yayınlar; Mosquitto olmayan bir uzak broker bunları kabul etmeyebilir.
  4. bridge_capath. Sistem CA deposunu gösterir. Broker, standart Linux dağıtımlarında bu depoda bulunan bir Let's Encrypt sertifikası sunar.
  5. max_queued_messages. Üst bağlantı koptuğunda yerel broker'ın kaç mesaj tamponlayacağını sınırlar. Bunu kesinti toleransınıza ve diskinize göre boyutlandırın.

Mosquitto'yu yeniden başlatın ve günlüğünde Connecting bridge connectmq-cloud ve ardından başarılı bir bağlantı olup olmadığını izleyin. Başarısız olursa CONNACK kodunu içeren günlük satırı sorunun kimlik bilgilerinden mi TLS'ten mi kaynaklandığını söyler.

Bridge'i uçtan uca test edin

# Dizüstü bilgisayarda: bulut tarafını izleyin
mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
  -u YOUR_USERNAME -P YOUR_PASSWORD -i YOUR_OTHER_CLIENT_ID \
  -t "acme/izmir/#" -v

# Tesis ağında: yerel broker'a yayın yapın
mosquitto_pub -h 192.168.10.5 -p 1883 -i press-sim-01 \
  -t "plant/line4/press/temp" -m "78.2" -q 1

Bulut abonesinde acme/izmir/line4/press/temp 78.2 görmelisiniz. Dizüstü bilgisayarın kendine ait bir kimlik bilgisi setine ihtiyaç duyduğunu unutmayın; iki bağlantı tek bir client ID'yi paylaşamaz. Kimlik bilgisi gerektirmeyen bir deneme için bridge'i 1883 portundaki genel MQTT test broker'ı'na yönlendirin, kullanıcı adı ve parola satırlarını kaldırın, benzersiz bir remote_clientid kullanın ve connectmq/demo/b7e2/ gibi bir uzak önek kullanın (genel veriler herkese görünür).

Seçenek 2: Bridge Olarak Node-RED

Tesiste zaten Node-RED çalışıyorsa ikinci bir broker sürecine hiç ihtiyacınız olmayabilir. İki MQTT config düğümü içeren bir akış bridge görevi görür ve size mesajları filtreleyebileceğiniz, yeniden adlandırabileceğiniz ve dönüştürebileceğiniz bir yer sağlar.

  1. Yerel broker için bir broker config'i (örneğin 192.168.10.5:1883) kullanan ve QoS 1 ile plant/# topic'ine abone olan bir mqtt in düğümü ekleyin.
  2. Topic'leri yeniden eşlemek ve dışa aktarmak istemediğiniz her şeyi atmak için bir function düğümü ekleyin.
  3. İkinci bir broker config'i kullanan bir mqtt out düğümü ekleyin: sunucu broker.connectmq.com, port 8883, "Use TLS" etkin, portaldaki kullanıcı adınız, parolanız ve client ID'nizle.
// Function düğümü: yerel topic'leri bulut isim alanına eşle
const LOCAL_PREFIX = "plant/";
const REMOTE_PREFIX = "acme/izmir/";

if (!msg.topic.startsWith(LOCAL_PREFIX)) {
    return null; // beklenmeyen topic'leri yok say
}

// Örnek filtre: ham debug sinyallerini dışa aktarma
if (msg.topic.includes("/debug/")) {
    return null;
}

msg.topic = REMOTE_PREFIX + msg.topic.slice(LOCAL_PREFIX.length);
msg.qos = 1;
return msg;

Aşağı inen komutlar için bir ayna yol ekleyin: Bulut config'inde acme/izmir/cmd/# topic'ine abone olan bir mqtt in, öneki cmd/ olarak yeniden yazan bir function düğümü ve yerel broker'a bir mqtt out. Node-RED MQTT eğitimi config düğümlerini ve TLS ayarlarını ayrıntılı olarak ele alır; resmi Node-RED belgeleri ise her MQTT düğümü seçeneğini listeler.

Ödünleşim şudur: Node-RED, bir broker'ın yapabildiği gibi diske tamponlama yapmaz. Üst bağlantı koptuğunda, kendi kuyruklamanızı eklemediğiniz sürece akıştan geçen mesajlar kaybolur. Store-and-forward gerektiğinde Mosquitto daha iyi seçimdir; mantık gerektiğinde ise Node-RED kazanır.

Mesaj Döngülerini Önlemek

Çift yönlü bridge'ler döngü oluşturabilir: Bir mesaj yukarı çıkar, aşağı yönlü kuralla eşleşir, geri gelir, tekrar yukarı çıkar. Sizi güvende tutan kurallar:

  1. Yukarıdaki gibi her yön için ayrık topic ağaçları kullanın (plant/ dışarı gider, cmd/ içeri gelir).
  2. # topic'ini asla aynı öneklerle her iki yönde köprülemeyin.
  3. MQTT 5 kurulumlarında No Local abonelik seçeneği bir client'ın kendi yayınlarını almasını engeller; bu, bridge aynı bağlantı üzerinde hem abone olup hem yayın yaptığında yardımcı olur.
  4. Üretim trafiğini etkinleştirmeden önce tek bir mesajla test edin ve her iki tarafı izleyin.

Sorun Giderme Kontrol Listesi

Belirti Olası neden Çözüm
CONNACK not authorized Yanlış kimlik bilgileri veya client ID Üç değerin hepsini portaldan kopyalayın
Bağlanırken TLS hatası CA deposu eksik veya yol yanlış ca-certificates kurun, bridge_capath değerini kontrol edin
Bridge bağlanıp sonra kopuyor Başka yerde kullanılan yinelenen client ID Her client'a kendi kimlik bilgisi setini verin
Topic'ler öneksiz görünüyor Topic satırı önekleri yer değiştirmiş Sıra önce yerel önek, sonra uzak önektir
Kesintiden sonra veri boşlukları Kuyruk çok küçük veya QoS 0 QoS 1 kullanın ve max_queued_messages değerini artırın
Mesajlar sonsuz yankılanıyor Çakışan in/out kuralları Her yön için ayrı ağaçlar

Bridge'leriniz için Bir Bulut Uç Noktası Seçmek

Bulut tarafı sıkıcı olmalıdır: her zaman açık, varsayılan olarak TLS'li ve tesis başına bir üst akış bağlantısının yanı sıra dashboard'larınızı ve servislerinizi kabul edebilen. Bir yönetilen MQTT broker yama ve sertifika işlerini ortadan kaldırır; bulut MQTT broker rehberi ise barındırma ödünleşimlerini adım adım anlatır. Bu yapı taşlarında yeniyseniz yeni başlayanlar için MQTT eğitimi ve yayınla/abone ol modeli bu yazıya iyi birer eşlikçidir.

Tesislerinizi ConnectMQ'ya Köprüleyin

app.connectmq.com adresinde kredi kartı gerektirmeden ücretsiz bir Serverless broker oluşturun, ardından oluşturulan kullanıcı adını, parolayı ve client ID'yi Mosquitto bridge'inize veya Node-RED config düğümünüze yapıştırın. ConnectMQ'nun canlı topic gezgini, köprülenen topic'lerin gelişini gerçek zamanlı gösterir; böylece daha fazla tesis bağlamadan önce eşlemeyi doğrulayabilirsiniz.

Sık Sorulan Sorular

ConnectMQ'nun yerleşik bir bridge'i var mı?

Hayır. Uçta, broker'a TLS üzerinden normal bir client olarak bağlanan Mosquitto, Node-RED veya başka bir MQTT client'ı çalıştırarak ona köprüleme yaparsınız.

User properties gibi MQTT 5 özelliklerini köprüleyebilir miyim?

MQTT 5 ile köprüleme yapmak için Mosquitto'da bridge_protocol_version mqttv50 ayarlayın. Her iki broker'ın da MQTT 5'i desteklediğini kontrol edin ve güvendiğiniz özelliklerin iletildiğini test edin.

Bir bridge kaç bağlantı kullanır?

Bir Mosquitto bridge, üzerinden kaç yerel cihaz yayın yaparsa yapsın uzak broker'a tek bir bağlantı kullanır. Bir Node-RED bridge ise broker config düğümü başına bir bağlantı kullanır.

İnternet bağlantısı koptuğunda verilere ne olur?

Bir Mosquitto bridge mesajları max_queued_messages sınırına kadar yerel olarak kuyruğa alır ve bağlantı geri geldiğinde iletir. Düz Node-RED akışları, siz eklemediğiniz sürece tamponlama yapmaz.

İlgili yazılar

MQTT'yi Kim İcat Etti? Petrol Boru Hatlarından IoT'ye Uzanan Tarih

MQTT, 1999'da IBM'den Andy Stanford-Clark ve Arcom'dan Arlen Nipper tarafından petrol boru hatlarını uydu üzerinden izlemek için icat edildi. Açık kaynağa, OASIS'e, ISO'ya ve bugünün yönetilen bulut broker'larına uzanan yolculuğunu izleyin.

7 dk okuma

MQTT Maksimum Mesaj Boyutu: Sınırlar ve Büyük Payload Stratejileri

MQTT teknik olarak 256 MB'lık bir paket taşıyabilir, ancak broker'lar, istemci kütüphaneleri ve cihazlar çok daha düşük sınırlar uygular. Gerçek sınırların nerede olduğunu, aşıldıklarında ne olduğunu ve büyük payload'ların nasıl gönderileceğini öğrenin.

6 dk okuma

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.