mosquitto_pub ve mosquitto_sub, MQTT dünyasının İsviçre çakılarıdır. Mosquitto ile birlikte gelirler (Debian/Ubuntu’da mosquitto-clients paketinde — bkz. Mosquitto kurulumu) ve yalnızca Mosquitto ile değil, herhangi bir MQTT broker’ı ile çalışırlar. Bu kopya kâğıdı, gerçekten ihtiyaç duyacağınız flag’leri ve örnekleri bir araya getiriyor.
Temel gidiş-dönüş
Bir terminalde abone olun, diğerinde publish edin:
mosquitto_sub -h test.mosquitto.org -t 'testmqtt/cheatsheet/#' -vmosquitto_pub -h test.mosquitto.org -t 'testmqtt/cheatsheet/hello' -m 'hello world'Shell’de topic’leri her zaman tırnak içine alın: # bash ve zsh’te bir yorum başlatır, + veya * ise beklenmedik şekilde genişletilebilir. Wildcard (joker karakter) kuralları MQTT topic’leri ve wildcard’lar yazısında açıklanıyor.
Mesajları online client’ta izleyin
Flag kopya kâğıdı
| Flag | Araç | Anlamı |
|---|---|---|
-h | ikisi de | Broker host’u (varsayılan localhost) |
-p | ikisi de | Port (varsayılan 1883, TLS ile 8883) |
-t | ikisi de | Topic; mosquitto_sub bunu birden fazla kez kabul eder |
-m | pub | Mesaj payload’u |
-q | ikisi de | QoS 0, 1 veya 2 |
-r | pub | Retain flag’ini ayarlar |
-u / -P | ikisi de | Kullanıcı adı / parola |
-i | ikisi de | Client ID (verilmezse rastgele) |
-v | sub | Payload’dan önce topic’i yazdırır |
-d | ikisi de | Debug: gönderilen ve alınan her MQTT paketini yazdırır |
--cafile | ikisi de | TLS için CA sertifikası (ayrıca --capath, --cert, --key) |
-V mqttv5 | ikisi de | Protokol sürümü: mqttv31, mqttv311 (varsayılan) veya mqttv5 |
-l | pub | stdin’i okur ve her satırı ayrı bir mesaj olarak gönderir |
-f | pub | Bir dosyanın içeriğini tek mesaj olarak gönderir |
-s | pub | stdin’in tamamını tek mesaj olarak gönderir |
-n | pub | Boş (sıfır uzunluklu) bir mesaj gönderir |
-W | sub | N saniye sonra çıkar |
-C | sub | N mesaj aldıktan sonra çıkar |
-R | sub | Eskimiş (stale) retained mesajları yazdırmaz |
-F | sub | Özel çıktı formatı (topic, payload, QoS, zaman damgaları…) |
mosquitto_pub örnekleri
mosquitto_pub -h broker.example.com -u alice -P 'secret' -i sensor-01 \
-q 1 -t 'home/livingroom/temp' -m '21.5'mosquitto_pub -t 'devices/42/state' -m '{"on":true,"brightness":80}'mosquitto_pub -t 'firmware/blob' -f ./payload.bin
tail -f /var/log/app.log | mosquitto_pub -t 'logs/app' -lRetained mesajları ayarlama ve temizleme
# store "online" as the retained value
mosquitto_pub -t 'devices/42/status' -m 'online' -r
# clear it: empty payload + retain flag
mosquitto_pub -t 'devices/42/status' -r -nSiz temizleyene kadar her yeni abone retained değeri anında alır. Arka plan için: MQTT retained mesajlar.
mosquitto_sub örnekleri
mosquitto_sub -h broker.example.com -u alice -P 'secret' -q 1 -v \
-t 'home/+/temp' -t 'home/+/humidity'value=$(mosquitto_sub -t 'home/livingroom/temp' -C 1 -W 10)
echo "temperature: $value"mosquitto_sub -t 'devices/#' -v -R# ISO-8601 timestamp, QoS, topic, payload
mosquitto_sub -t 'devices/#' -F '%I q%q %t %p'
# just the payloads, one per line, e.g. for jq
mosquitto_sub -t 'devices/+/state' -F '%p' | jq .Sık kullanılan -F token’ları: %t topic, %p payload, %q QoS, %r retain flag’i, %l payload uzunluğu, %I ISO-8601 zamanı, %U nanosaniyeli Unix zamanı, %x hex olarak payload.
TLS örnekleri
mosquitto_sub -h broker.example.com -p 8883 --cafile ca.crt -t 'secure/#' -vmosquitto_pub -h broker.example.com -p 8883 --capath /etc/ssl/certs \
-u alice -P 'secret' -t 'secure/hello' -m 'over TLS'mosquitto_pub -h broker.example.com -p 8883 --cafile ca.crt \
--cert client.crt --key client.key -t 'secure/hello' -m 'mTLS'--insecure hostname doğrulamasını atlar — bir test ortamında işe yarar, başka her yerde tehlikelidir. Hangi portun ne işe yaradığı MQTT portları yazısında özetleniyor.
MQTT 5 örnekleri
# publish with a message expiry and content type
mosquitto_pub -V mqttv5 -t 'jobs/1' -m '{"run":true}' \
-D publish message-expiry-interval 60 \
-D publish content-type application/json
# subscriber prints properties with -F
mosquitto_sub -V mqttv5 -t 'jobs/#' -F '%t %p (expiry %E)'-D, belirli bir paket türü için bir MQTT 5 property’si ayarlar. Yeni property’lerin ne işe yaradığı için MQTT 5 ve 3.1.1 karşılaştırması yazısına bakın.
Script kalıpları
Her iki araç da bağlanamadığında sıfırdan farklı bir çıkış koduyla sonlandığı için shell script’lerine, cron job’larına ve health check’lere kolayca yerleşir.
#!/usr/bin/env bash
# exits 0 if a message makes the round trip within 5 seconds
TOPIC="health/$(hostname)/$RANDOM"
mosquitto_sub -h broker.example.com -u monitor -P 'secret' -t "$TOPIC" -C 1 -W 5 > /dev/null &
SUB=$!
sleep 1
mosquitto_pub -h broker.example.com -u monitor -P 'secret' -t "$TOPIC" -m ping
wait $SUB && echo "broker OK" || { echo "broker FAILED"; exit 1; }while true; do
mosquitto_pub -t 'lab/cpu/load' -m "$(cut -d' ' -f1 /proc/loadavg)"
sleep 10
donemosquitto_sub -h broker.example.com -u alice -P 'secret' -t 'devices/#' \
-F '%I %t %p' >> mqtt.logSaniyede birkaç mesaj için her mesajda yeni bir bağlantı açmak sorun değildir. Daha yüksek hızlar için -l ile tek bir bağlantıyı açık tutup satırları ona pipe’layın ya da bir client kütüphanesine geçin.
Sık yapılan hatalar
- Tırnaksız
#—mosquitto_sub -t devices/#bazı shell’lerde çalışır, bazılarında ise sessizcedevices/hâline gelir. Tırnak içine alın. - Aynı client ID’yi iki kez kullanmak — aynı
-iile iki komut çalıştırmak, broker’ın eskisinin bağlantısını kesmesine yol açar; bu da rastgele bir kopma gibi görünür. Gerekmedikçe-i’yi kullanmayın ya da client ID oluşturucuyu kullanın. - Eski mesajları beklemek —
mosquitto_subyalnızca abone olduktan sonra publish edilen mesajları ve her topic için retained mesajı alır. Yeni bir clean session için başka hiçbir şey saklanmaz. - Çok büyük payload — broker’lar mesaj boyutunu sınırlayabilir; kendi broker’ınızınkini paket boyutu hesaplayıcı ile kontrol edin.
Peki ya WebSockets?
Standart mosquitto_pub ve mosquitto_sub derlemeleri yalnızca TCP ve TLS üzerinden MQTT konuşur; bir ws:// veya wss:// endpoint’ine bağlanamazlar. Bir broker’ın WebSocket listener’ını test etmek için online MQTT client’ı veya MQTT.js gibi bir kütüphaneyi kullanın — ayrıntılar için WebSockets üzerinden MQTT yazısını okuyun. Bunun yerine kendi dilinizde hazır bir kod parçası istiyorsanız, MQTT kod oluşturucu sizin için bir tane yazar.
Sıkça sorulan sorular
mosquitto_pub ile retained bir mesajı nasıl silerim?
Aynı topic’e boş bir retained mesaj publish edin: mosquitto_pub -t the/topic -r -n. Broker, o topic için saklanan retained mesajı siler.
mosquitto_sub çıktısında topic adını nasıl görürüm?
-v (verbose) ekleyin. Her satır, topic, ardından bir boşluk ve payload olarak yazdırılır. Tam kontrol için -F’yi -F "%t %p" gibi bir format string’iyle kullanın.
mosquitto_pub WebSockets üzerinden bağlanabilir mi?
Standart derlemelerde hayır. mosquitto_pub ve mosquitto_sub yalnızca TCP ve TLS üzerinden MQTT konuşur. Bir WebSocket endpoint’ini test etmek için tarayıcı tabanlı bir client veya MQTT.js gibi bir kütüphane kullanın.