Bu MQTT canlı ortam kontrol listesi, masanızda çalışan bir demo ile yıllarca çalışan bir filo arasındaki farkı yaratan kontrolleri bir araya getiriyor. TLS, kimlik bilgileri, client ID'ler, yeniden bağlanma davranışı, topic tasarımı, oturumlar, izleme ve uyarıları kapsamak için yayına almadan önce listeyi baştan sona uygulayın. Her madde kısa ve test edilebilirdir; sondaki kod ise bir ConnectMQ broker'ı için uyarlayabileceğiniz, canlı ortama hazır bir client gösterir.
Bu Kontrol Listesi Nasıl Kullanılır?
Her maddeyi evet veya hayır sorusu olarak ele alın ve kanıt ekleyin: bir yapılandırma dosyası, bir test sonucu, bir ekran görüntüsü. Bilerek atladığınız maddeleri gerekçesiyle birlikte yazın. Listeyi geliştirme sırasında bir kez, yayından önce tekrar ve her büyük firmware veya arka uç değişikliğinden sonra yeniden çalıştırın.
Hâlâ prototip aşamasındaysanız ücretsiz herkese açık MQTT broker öğrenmek için uygundur; ancak bu listedeki hiçbir madde ona karşı işaretlenmemelidir. Canlı ortam, kendi kimlik bilgilerinizle özel bir broker demektir.
Bölüm 1: Broker ve Güvenlik
- Özel broker hazır. Canlı ortam trafiği herkese açık bir test broker'ında değil, özel bir broker'da çalışır.
- Yalnızca TLS. Cihazlar 8883 portunu (TLS üzerinden MQTT), tarayıcılar 8084 portunu (
/mqttyolunda Secure WebSocket) kullanır. Düz 1883 ve 8083 canlı ortam firmware'inde kullanılmaz. - Sertifika doğrulaması açık. Client'lar broker sertifikasını güvenilir bir CA'ya karşı doğrular. Testten kalan
insecurebayrakları yoktur. - CA paketi stratejisi belirlendi. Cihazların, mevcut kök sertifikaların süresi dolmadan güncel olanları alabileceği bir yol vardır.
- Benzersiz kimlik bilgileri. Her cihazın veya ağ geçidinin kendi kimlik bilgileri vardır; böylece biri diğerlerini etkilemeden iptal edilebilir.
- Kaynak kontrolünde gizli bilgi yok. Kimlik bilgileri Git'te veya uygulama paketlerinde değil, güvenli depolamada veya provizyon sistemlerinde tutulur.
- İptal test edildi. Staging ortamında bir kimlik bilgisini gerçekten iptal ettiniz ve cihazın reddedildiğini doğruladınız.
Bu maddelerin gerekçesi için MQTT güvenliği en iyi uygulamaları yazısına bakın.
Bölüm 2: Client Kimliği ve Oturumlar
- Benzersiz, sabit client ID'ler. Her client ID bir seri numarasından veya provizyon kaydından türetilir ve yeniden başlatmalar arasında asla değişmez.
- Yinelenen client ID yok. İki süreç asla aynı ID'yi paylaşmaz; yinelenen ID'ler sonsuz bir döngüde birbirini düşürür.
- Client başına clean start veya kalıcı oturum seçildi. Mesaj kaçırmaması gereken aboneler kalıcı oturum, kısa ömürlü araçlar temiz oturum kullanır.
- Oturum süresi dolumu bilinçli olarak ayarlandı. MQTT 5'te oturum süresi dolum aralığı, bir cihazın ne kadar süre çevrimdışı kalabileceğiyle örtüşür.
- Last Will yapılandırıldı. Cihazlar, arka ucun beklenmedik bağlantı kopmalarından haberdar olması için bir durum topic'inde Last Will ayarlar.
Bölüm 3: Bağlantı ve Yeniden Bağlanma
- Otomatik yeniden bağlanma. Client'lar ağ kaybından veya broker yeniden başlatmalarından sonra kendiliğinden yeniden bağlanır.
- Jitter'lı üstel backoff. Yeniden deneme gecikmeleri büyür ve rastgeleleştirilir; böylece bir filo aynı anda yeniden bağlanmaz.
- Yeniden bağlanmada yeniden abone olma. Kalıcı oturum kullanılmıyorsa abonelikler connect callback'inde geri yüklenir.
- Keepalive ayarlandı. Tipik değerler 30 ile 120 saniye arasıdır; kararlı ağlarda daha kısa, veri tasarrufu için hücresel ağlarda daha uzun.
- Çevrimdışı tamponlama. Cihazlar bağlantı yokken okumaları, belleği korumak için bir üst sınırla yerel olarak tamponlar.
- Arıza test edildi. Ağ kablosunu çektiniz, broker bağlantısını yeniden başlattınız ve cihazların gücünü kesip açtınız; toparlanma çalıştı.
Bölüm 4: Topic'ler, Payload'lar ve QoS
- Topic ağacı belgelendi. Yazılı bir kural seviyeleri, adlandırmayı ve örnekleri kapsar. Arka ucunuzun yönlendirme yapması gereken seviyelerden, örneğin saha, hat ve cihazdan başlayın.
- Yayın kodunda joker karakter yok.
+ve#yalnızca aboneler tarafından kullanılır. - Payload formatı sürümlendi. JSON veya ikili payload'lar, şemayı daha sonra değiştirebilmeniz için bir sürüm alanı içerir.
- Payload boyutu limitler dahilinde. Mesajlar, planınızın maksimum mesaj boyutuna pay bırakarak sığar.
- QoS mesaj türüne göre seçildi. Kaybın kabul edilebilir olduğu yüksek frekanslı telemetri için QoS 0, olaylar ve komutlar için QoS 1. Bkz. MQTT QoS seviyeleri açıklaması.
- Retained message'lar bilinçli kullanılıyor. Her telemetri okumasını değil, durumu ve yapılandırmayı retain edin.
Bölüm 5: Kapasite ve Limitler
- Bağlantı sayısı plana uyuyor. Arka uçlar, araçlar ve staging dahil en yüksek eşzamanlı bağlantı sayısı, pay bırakılarak plan limitleri içinde kalır.
- Mesaj hızı tahmin edildi. Saniye başına beklenen mesaj sayınızı biliyor ve bunun birkaç katında test ettiniz.
- Client'larda kota yönetimi.
0x97(Quota exceeded) gibi MQTT 5 reason code'ları loglanır ve sıkı yeniden deneme döngüleri yerine geri çekilmeye yol açar.
Bölüm 6: İzleme, Uyarılar ve Operasyonlar
- İzleme aktif. Bağlı client'lar, mesaj akışı ve uçtan uca bir sonda izlenir. Bkz. MQTT broker izleme.
- Uyarılar yönlendirildi. Uyarılar bir kişiye ulaşır; broker'a erişilemiyor, toplu bağlantı kopmaları ve kota hataları için bir nöbet sorumlusu ve bir runbook vardır.
- Staging ortamı. Firmware ve arka uç değişikliklerini filoya ulaşmadan önce test etmek için ayrı bir broker vardır.
Özet Tablo
| Alan | Yayından önce olmazsa olmaz | Yaygın tuzak |
|---|---|---|
| Güvenlik | TLS, benzersiz kimlik bilgileri, iptal | Firmware ile gönderilen test kimlik bilgileri |
| Kimlik | Sabit ve benzersiz client ID'ler | Her açılışta rastgele ID'ler |
| Bağlantı | Jitter'lı backoff, çevrimdışı tampon | Kesintilerden sonra yeniden bağlanma fırtınaları |
| Topic'ler | Belgelenmiş ağaç, sürümlenmiş payload'lar | Topic adlarında kişisel veri |
| Kapasite | Bağlantılarda ve boyutta pay | Arka uç ve araç bağlantılarını unutmak |
| Operasyonlar | Sonda, uyarılar, runbook, staging | Kimsenin almadığı uyarılar |
Canlı Ortama Hazır Bir Client Şablonu
paho-mqtt 2.x kullanan bu Python client'ı, yukarıdaki maddelerin çoğunu uygular: sertifika doğrulamalı TLS, sabit bir client ID, bir Last Will, MQTT 5 oturum süresi dolumu, bağlantıda yeniden abone olma, backoff ve reason code loglama. Yer tutucuları ConnectMQ portalındaki kimlik bilgileriyle değiştirin.
import json
import ssl
import time
import paho.mqtt.client as mqtt
from paho.mqtt.packettypes import PacketTypes
from paho.mqtt.properties import Properties
HOST = "YOUR_BROKER_HOST"
CLIENT_ID = "YOUR_CLIENT_ID" # sabit, cihaz başına benzersiz
BASE = f"plant1/line1/{CLIENT_ID}"
STATUS = f"{BASE}/status"
def on_connect(client, userdata, flags, reason_code, properties):
if reason_code.is_failure:
print("Connect failed:", reason_code)
return
print("Connected, session present:", flags.session_present)
client.publish(STATUS, "online", qos=1, retain=True)
client.subscribe(f"{BASE}/cmd", qos=1)
def on_disconnect(client, userdata, flags, reason_code, properties):
print("Disconnected:", reason_code) # örn. Quota exceeded
def on_message(client, userdata, msg):
print("Command:", msg.topic, msg.payload.decode())
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=CLIENT_ID,
protocol=mqtt.MQTTv5)
client.username_pw_set("YOUR_USERNAME", "YOUR_PASSWORD")
client.tls_set(cert_reqs=ssl.CERT_REQUIRED)
client.will_set(STATUS, "offline", qos=1, retain=True)
client.reconnect_delay_set(min_delay=1, max_delay=120)
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_message = on_message
connect_props = Properties(PacketTypes.CONNECT)
connect_props.SessionExpiryInterval = 3600 # çevrimdışıyken oturumu 1 saat koru
client.connect(HOST, 8883, keepalive=60, clean_start=False, properties=connect_props)
client.loop_start()
while True:
reading = {"v": 1, "temp": 21.7, "ts": int(time.time())}
if client.is_connected():
client.publish(f"{BASE}/telemetry", json.dumps(reading), qos=0)
time.sleep(10)
Bir filo genelinde ilk yeniden bağlanmaya jitter eklemek için, açılışta ilk connect çağrısından önce rastgele bir saniye sayısı kadar bekleyin.
Kontrol Listesini ConnectMQ'da Uygulamak
ConnectMQ'da birkaç madde sizin için halledilir veya doğrulanması kolaylaştırılır. Her broker, client ID'lerin bağlandığı otomatik oluşturulan kimlik bilgileri alır; bu da 5. ve 8. maddeleri zorunlu kılar. 8883'teki TLS ve 8084'teki Secure WebSocket, standart CA paketlerinin güvendiği Let's Encrypt sertifikalarını kullanır. Flood koruması ve tekrarlanan başarısız oturum açma denemelerinden sonra IP engelleme, normalde kendiniz kuracağınız bir katman ekler.
- madde için plan limitlerini kontrol edin: ücretsiz Serverless planı 25 bağlantıya, QoS 1'e ve 256 KB mesajlara kadar destekler; Serverless (Paid) 1.000 bağlantıya, QoS 2'ye, 1 MB mesajlara ve paylaşımlı aboneliklere kadar destekler; Dedicated ve BYOC ise size izole kapasite sunar. 28. ve 29. maddeler için portalın panosunu, canlı topic gezginini ve uyarı kaydıyla birlikte eşik tabanlı uyarı kurallarını kullanın ve kritik ağ geçitleri için
$SYS/broker/connection/{clientId}/statetopic'ine abone olun. Ücretsiz bir Serverless broker, 30. madde için de iyi bir staging ortamı olur.
ConnectMQ ile Başlayın
Kredi kartı gerekmeden ücretsiz Serverless planıyla başlayarak canlı ortama hazır broker'ınızı app.connectmq.com adresinde oluşturun. Pilotun ötesine geçmeye hazır olduğunuzda MQTT prototipten canlı ortama geçiş rehberimizi okuyun, seçenekleri bulut MQTT broker rehberinde karşılaştırın veya barındırılan bir MQTT broker'ın sizin için neleri üstlendiğini görün.
Sık Sorulan Sorular
MQTT canlı ortama geçmeden önce en sık atlanan madde hangisidir?
Gerçek arızalar altında yeniden bağlanma davranışı. Pek çok ekip yalnızca sorunsuz senaryoyu test eder, ardından ilk kesintiden sonra yeniden bağlanma fırtınalarını veya yinelenen client ID'leri keşfeder.
Canlı ortamdaki cihazlar QoS 2 kullanmalı mı?
Nadiren. Alıcı tarafta idempotent işleme ile QoS 1, çoğu durumu daha az ek yükle karşılar; QoS 2'yi yinelenmelerin gerçekten zararlı olduğu mesajlar için saklayın.
Herkese açık test broker'ını canlı ortamda kullanabilir miyim?
Hayır. Herkese açık broker'lar herkes tarafından okunabilir ve sıkı limitlere sahiptir. Kendi kimlik bilgileriniz ve TLS ile özel bir broker kullanın.
Kontrol listesini ne sıklıkla yeniden çalıştırmalıyım?
Her lansmandan önce ve önemli firmware, arka uç veya plan değişikliklerinden sonra. Denetimlerin ve devir teslimlerin kolay olması için kanıtları saklayın.



