MQTT (Message Queuing Telemetry Transport), IoT cihazları için tasarlanmış hafif, publish-subscribe tabanlı mesajlaşma protokolüdür. Düşük bant genişliği ve güç tüketimi gerektiren senaryolarda ideal olan MQTT, akıllı ev sistemlerinden endüstriyel IoT'a kadar geniş bir alanda kullanılmaktadır.
MQTT Nedir?
IBM tarafından 1999'da geliştirilen MQTT, TCP/IP üzerinde çalışan açık kaynaklı bir protokoldür. Özellikle:
- Sınırlı bant genişliğine sahip ağlarda
- Güç kısıtlaması olan cihazlarda
- Yüksek gecikmeli veya güvenilmez ağlarda
- Çok sayıda cihazın bağlandığı sistemlerde
etkili bir şekilde çalışmak üzere tasarlanmıştır.
Publish-Subscribe Modeli
MQTT, geleneksel request-response modelinden farklı olarak pub-sub (yayınla-abone ol) modeli kullanır:
Temel Bileşenler
- Broker: Mesajları alan ve dağıtan merkezi sunucu (Mosquitto, HiveMQ, EMQX)
- Publisher: Belirli bir topic'e mesaj yayınlayan cihaz
- Subscriber: Belirli topic'lere abone olan ve mesaj alan cihaz
- Topic: Mesajların kategorize edildiği hiyerarşik yapı (örn: home/living-room/temperature)
QoS Seviyeleri
MQTT üç farklı Quality of Service seviyesi sunar:
QoS 0 - At Most Once
"Fire and forget" - Mesaj bir kez gönderilir, teslim garantisi yok. En az overhead.
QoS 1 - At Least Once
Mesajın en az bir kez teslim edilmesi garanti edilir. Duplike mesajlar olabilir.
QoS 2 - Exactly Once
Mesajın tam olarak bir kez teslim edilmesi garanti edilir. En yüksek overhead.
Topic Hiyerarşisi
# Topic yapısı örnekleri home/living-room/temperature home/living-room/humidity home/bedroom/temperature factory/machine-1/status factory/machine-1/sensors/vibration # Wildcard kullanımı home/+/temperature # Tek seviye: home/living-room/temperature, home/bedroom/temperature home/# # Çoklu seviye: home altındaki tüm topic'ler
Retained Messages ve Last Will
Retained Messages
Broker'da saklanan son mesaj. Yeni abone olan istemciler hemen bu değeri alır.
Last Will and Testament (LWT)
İstemci beklenmedik şekilde bağlantıyı kaybettiğinde broker'ın yayınlayacağı mesaj. Cihaz durumu takibi için kritik.
Güvenlik
- TLS/SSL: Şifreli iletişim (MQTTS, port 8883)
- Username/Password: Temel kimlik doğrulama
- Client Certificates: X.509 sertifika tabanlı auth
- ACL: Topic bazlı erişim kontrolü
Popüler MQTT Broker'lar
- Mosquitto: Açık kaynak, hafif, Eclipse Foundation
- HiveMQ: Enterprise özellikler, clustering
- EMQX: Yüksek performans, Erlang tabanlı
- AWS IoT Core: Managed MQTT servisi
Kod Örneği (Python - paho-mqtt)
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
print("Connected")
client.subscribe("home/+/temperature")
def on_message(client, userdata, msg):
print(f"{msg.topic}: {msg.payload.decode()}")
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.hivemq.com", 1883, 60)
client.loop_forever()
MQTT vs HTTP
| Özellik | MQTT | HTTP |
|---|---|---|
| Model | Pub-Sub | Request-Response |
| Bağlantı | Kalıcı | Her istek yeni |
| Header Overhead | 2 byte minimum | Yüzlerce byte |
| Bi-directional | Evet | Polling gerekir |
MQTT, IoT projelerinde düşük güç tüketimi ve gerçek zamanlı iletişim gerektiren senaryolar için ideal çözümdür. Doğru QoS seviyesi ve güvenlik yapılandırmasıyla güvenilir IoT sistemleri kurabilirsiniz.