Rehberler

mosquitto_pub ve mosquitto_sub: Komut Örnekleri ve Kopya Kâğıdı

Hazır mosquitto_pub ve mosquitto_sub örnekleri: flag tablosu, QoS, retained mesajlar, kimlik doğrulama, TLS, MQTT 5, dosyalar, satır modu ve -F çıktısı.

Güncellendi · 7 dk okuma

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:

Terminal 1
mosquitto_sub -h test.mosquitto.org -t 'testmqtt/cheatsheet/#' -v
Terminal 2
mosquitto_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ı

FlagAraçAnlamı
-hikisi deBroker host’u (varsayılan localhost)
-pikisi dePort (varsayılan 1883, TLS ile 8883)
-tikisi deTopic; mosquitto_sub bunu birden fazla kez kabul eder
-mpubMesaj payload’u
-qikisi deQoS 0, 1 veya 2
-rpubRetain flag’ini ayarlar
-u / -Pikisi deKullanıcı adı / parola
-iikisi deClient ID (verilmezse rastgele)
-vsubPayload’dan önce topic’i yazdırır
-dikisi deDebug: gönderilen ve alınan her MQTT paketini yazdırır
--cafileikisi deTLS için CA sertifikası (ayrıca --capath, --cert, --key)
-V mqttv5ikisi deProtokol sürümü: mqttv31, mqttv311 (varsayılan) veya mqttv5
-lpubstdin’i okur ve her satırı ayrı bir mesaj olarak gönderir
-fpubBir dosyanın içeriğini tek mesaj olarak gönderir
-spubstdin’in tamamını tek mesaj olarak gönderir
-npubBoş (sıfır uzunluklu) bir mesaj gönderir
-WsubN saniye sonra çıkar
-CsubN mesaj aldıktan sonra çıkar
-RsubEskimiş (stale) retained mesajları yazdırmaz
-FsubÖzel çıktı formatı (topic, payload, QoS, zaman damgaları…)

mosquitto_pub örnekleri

Kimlik bilgileri ve sabit client ID ile QoS 1
mosquitto_pub -h broker.example.com -u alice -P 'secret' -i sensor-01 \
  -q 1 -t 'home/livingroom/temp' -m '21.5'
JSON payload (tek tırnaklar shell’in araya girmesini engeller)
mosquitto_pub -t 'devices/42/state' -m '{"on":true,"brightness":80}'
Bir dosya gönderin veya başka bir komuttan satır akışı yapın
mosquitto_pub -t 'firmware/blob' -f ./payload.bin
tail -f /var/log/app.log | mosquitto_pub -t 'logs/app' -l

Retained mesajları ayarlama ve temizleme

bash
# 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 -n

Siz temizleyene kadar her yeni abone retained değeri anında alır. Arka plan için: MQTT retained mesajlar.

mosquitto_sub örnekleri

Birden fazla topic, ayrıntılı çıktı, QoS 1
mosquitto_sub -h broker.example.com -u alice -P 'secret' -q 1 -v \
  -t 'home/+/temp' -t 'home/+/humidity'
Tek bir mesaj alıp çıkın (script’lerde çok kullanışlı)
value=$(mosquitto_sub -t 'home/livingroom/temp' -C 1 -W 10)
echo "temperature: $value"
Eskimiş retained mesajları yok sayın
mosquitto_sub -t 'devices/#' -v -R
-F ile özel format
# 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

Belirli bir CA tarafından doğrulanan sunucu
mosquitto_sub -h broker.example.com -p 8883 --cafile ca.crt -t 'secure/#' -v
Herkese açık (ör. Let’s Encrypt) sertifikaya sahip broker
mosquitto_pub -h broker.example.com -p 8883 --capath /etc/ssl/certs \
  -u alice -P 'secret' -t 'secure/hello' -m 'over TLS'
Client sertifikası (mutual 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

bash
# 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.

Basit broker health check’i
#!/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; }
Her 10 saniyede bir ölçüm publish edin
while true; do
  mosquitto_pub -t 'lab/cpu/load' -m "$(cut -d' ' -f1 /proc/loadavg)"
  sleep 10
done
Her şeyi zaman damgalarıyla bir dosyaya loglayın
mosquitto_sub -h broker.example.com -u alice -P 'secret' -t 'devices/#' \
  -F '%I %t %p' >> mqtt.log

Saniyede 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 sessizce devices/ hâline gelir. Tırnak içine alın.
  • Aynı client ID’yi iki kez kullanmak — aynı -i ile 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_sub yalnı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.