IoT Eğitimleri

mosquitto_pub mosquitto_sub Örnekleri: MQTT Testi için 25 Pratik Komut

QoS, retained mesajlar, Last Will, TLS, çıktı biçimlendirme ve MQTT 5 özelliklerini kapsayan, tümü broker.connectmq.com üzerinde çalıştırılabilen 25 mosquitto_pub ve mosquitto_sub komutundan oluşan kopyala-yapıştır başvuru kaynağı.

Bir bulut MQTT broker'a yayın yapan ve abone olan mosquitto_pub mosquitto_sub örneklerini gösteren terminal penceresi
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

Bu mosquitto_pub mosquitto_sub örnekleri, cihazları test ederken, topic'lerde hata ayıklarken ve MQTT betikleri yazarken gerçekten başvuracağınız komutlardır. Her biri kopyalayıp yapıştırmaya hazırdır ve ücretsiz herkese açık broker broker.connectmq.com üzerinde çalışır; böylece davranışı saniyeler içinde kendiniz doğrulayabilirsiniz. Sonunda QoS, retained mesajlar, Last Will, TLS ve MQTT 5 özelliklerini komut satırından nasıl kullanacağınızı öğrenmiş olacaksınız.

Başlamadan Önce

Mosquitto istemcilerini kurun:

# Debian / Ubuntu / Raspberry Pi OS
sudo apt install mosquitto-clients

# macOS
brew install mosquitto

# Windows: Mosquitto'yu mosquitto.org adresinden kurun; kurulum paketi mosquitto_pub.exe ve mosquitto_sub.exe içerir

mosquitto_pub --help ile kontrol edin; ilk satır sürümü gösterir. Aşağıdaki örneklerin birçoğu 2.x sürümünü gerektirir (-x, %j çıktısı ve bazı MQTT 5 seçenekleri için). Tüm seçeneklerin başvurusu resmi mosquitto_pub kılavuzunda bulunur.

Herkese açık broker için üç kural:

  • Her zaman -i ile benzersiz ve boş olmayan bir client ID verin. Aynı ID'ye sahip iki istemci birbirinin bağlantısını keser.
  • Benzersiz bir topic öneki kullanın. Örnekler connectmq/demo/x7q2/ kullanır; x7q2 yerine kendi rastgele dizenizi yazın.
  • Herkese açık alan herkes tarafından okunabilir. Asla kimlik bilgisi veya kişisel veri yayınlamayın.

Komutları kısa tutmak için iki kabuk değişkeni tanımlayın (bash/zsh):

H="-h broker.connectmq.com -p 1883"
T="connectmq/demo/x7q2"

İki terminal açın: biri mosquitto_sub, diğeri mosquitto_pub için.

Temel mosquitto_pub mosquitto_sub Örnekleri

1. Tek bir topic'e abone olun

mosquitto_sub $H -i sub-x7q2 -t "$T/hello"

2. Bir mesaj yayınlayın

mosquitto_pub $H -i pub-x7q2 -t "$T/hello" -m "hello from the CLI"

3. Önekinizin altındaki her şeye abone olun ve topic'leri yazdırın (-v, payload'dan önce topic'i yazdırır)

mosquitto_sub $H -i sub-x7q2 -t "$T/#" -v

4. Tek seviyeli joker karakter: herhangi bir odadaki tüm sıcaklık topic'leri

mosquitto_sub $H -i sub-x7q2 -t "$T/+/temperature" -v

5. Tek bir istemcide birden fazla topic filtresi

mosquitto_sub $H -i sub-x7q2 -t "$T/+/temperature" -t "$T/+/humidity" -v

6. JSON yayınlayın (tek tırnaklar, kabuğun süslü parantezleri ve tırnakları yorumlamasını engeller)

mosquitto_pub $H -i pub-x7q2 -t "$T/kitchen/temperature" -m '{"value": 21.8, "unit": "C"}'

Windows cmd.exe üzerinde bunun yerine iç tırnakları kaçış karakteriyle yazın: -m "{\"value\": 21.8}".

QoS ve Oturumlar

7. QoS 1 ile yayın yapın ve abone olun

mosquitto_sub $H -i sub-x7q2 -t "$T/alarms" -q 1 -v
mosquitto_pub $H -i pub-x7q2 -t "$T/alarms" -q 1 -m "door open"

Etkin QoS, yayın QoS'u ile abonelik QoS'unun düşük olanıdır. Tam tablo için MQTT QoS seviyeleri açıklaması yazısına bakın.

8. -d ile protokol alışverişini izleyin (debug; CONNECT, PUBLISH, PUBACK ve benzerlerini gösterir)

mosquitto_pub $H -i pub-x7q2 -t "$T/alarms" -q 2 -m "test" -d

QoS 2 için PUBLISH, PUBREC, PUBREL ve PUBCOMP paketlerini görürsünüz. Bir broker'ın gerçekte ne yaptığını kanıtlamanın en hızlı yolu budur.

9. Kalıcı oturum: çevrimdışıyken yayınlanan mesajları alın

# Sabit bir ID ile, clean session devre dışı olarak bir kez abone olun, sonra Ctrl+C
mosquitto_sub $H -i sub-persist-x7q2 -c -q 1 -t "$T/queue" -v
# Durdurulmuşken QoS 1 ile yayın yapın
mosquitto_pub $H -i pub-x7q2 -q 1 -t "$T/queue" -m "queued while offline"
# Aynı ID ve -c ile yeniden bağlanın: mesaj teslim edilir
mosquitto_sub $H -i sub-persist-x7q2 -c -q 1 -t "$T/queue" -v

10. MQTT 5 oturum sona erme süresi (bağlantı kesildikten sonra oturumu 300 saniye tut)

mosquitto_sub $H -V 5 -i sub-persist-x7q2 -c -x 300 -q 1 -t "$T/queue" -v

Herkese açık broker oturumları en fazla 30 dakika tutar.

Retained Mesajlar

11. Retained bir durum yayınlayın

mosquitto_pub $H -i pub-x7q2 -t "$T/pump1/state" -r -m "running"

Her yeni abone, bir sonraki yayını beklemeden running değerini hemen alır.

12. Yalnızca retained mesajları gösterin, sonra çıkın

mosquitto_sub $H -i sub-x7q2 -t "$T/#" -v --retained-only -W 3

-W 3 3 saniye sonra çıkar; mevcut durumun anlık görüntüsünü alan betikler için kullanışlıdır.

13. Eski retained mesajları yok sayın (-R, geldiğinde retain bayrağı ayarlı olan mesajları atlar)

mosquitto_sub $H -i sub-x7q2 -t "$T/#" -v -R

14. Bir retained mesajı silin (boş bir retained payload yayınlayın)

mosquitto_pub $H -i pub-x7q2 -t "$T/pump1/state" -r -n

15. Önekinizin altındaki tüm retained mesajları temizleyin

mosquitto_sub $H -i cleaner-x7q2 -t "$T/#" --remove-retained --retained-only -W 3

Bunu her broker'da dikkatli kullanın; filtrenin eşleştiği her şeyin retained durumunu kaldırır.

Last Will and Testament

16. İstemciyi çevrimdışı olarak işaretleyen bir Last Will kaydedin

mosquitto_sub $H -i device-x7q2 -t "$T/device1/cmd" \
  --will-topic "$T/device1/status" --will-payload "offline" --will-retain --will-qos 1

Başka bir terminalde durumu mosquitto_sub $H -i watch-x7q2 -t "$T/device1/status" -v ile izleyin, ardından ilk süreci aniden sonlandırın (terminali kapatın veya kill -9). Keep-alive zaman aşımına uğradıktan sonra broker offline yayınlar. Düzgün bir Ctrl+C, DISCONNECT gönderir ve Will'i tetiklemez. Daha hızlı görmek için -k 10 ile kısa bir keep-alive ayarlayın.

Betik Yazma ve Çıktı Kontrolü

17. Tam olarak N mesaj alın, sonra çıkın

mosquitto_sub $H -i sub-x7q2 -t "$T/kitchen/temperature" -C 1

Kabuk betiklerinde harikadır: TEMP=$(mosquitto_sub ... -C 1).

18. Zaman damgalı özel çıktı formatı

mosquitto_sub $H -i sub-x7q2 -t "$T/#" -F "@Y-@m-@dT@H:@M:@S %t %p"

19. jq'ya aktarmak için JSON çıktısı

mosquitto_sub $H -i sub-x7q2 -t "$T/#" -F "%j" | jq -c '{topic, payload}'

20. Bir dosyanın veya stdin'in her satırını ayrı bir mesaj olarak yayınlayın

printf '20.1\n20.4\n20.9\n' | mosquitto_pub $H -i pub-x7q2 -t "$T/kitchen/temperature" -l

Bütün bir dosyayı tek mesaj olarak göndermek için -f firmware.bin, stdin'in tamamını tek mesaj olarak göndermek için -s kullanın. Herkese açık broker mesajları 64 KB ile sınırlar.

21. Küçük bir sensör simülatörü (istemci başına saniyede 10 mesajlık herkese açık sınıra uyun)

while true; do
  mosquitto_pub $H -i sim-x7q2 -t "$T/lab/temperature" \
    -m "{\"value\": $((RANDOM % 10 + 20)), \"ts\": $(date +%s)}"
  sleep 1
done

TLS ve Kimlik Doğrulama

22. 8883 portunda şifreli bağlantı

# Linux: sistem CA paketini kullanın
mosquitto_sub -h broker.connectmq.com -p 8883 --capath /etc/ssl/certs \
  -i tls-x7q2 -t "$T/#" -v

macOS veya Windows'ta, bu sistemler bir PEM dizini sunmadığı için --cafile seçeneğini ISRG Root X1 sertifikasını (Let's Encrypt) içeren bir PEM dosyasına yöneltin. Error: A TLS error occurred görürseniz CA dosya yolunu ve sistem saatinizi kontrol edin.

23. Kimlik bilgileriyle özel broker

mosquitto_pub -h YOUR_BROKER_HOST -p 8883 --capath /etc/ssl/certs \
  -i YOUR_CLIENT_ID -u YOUR_USERNAME -P YOUR_PASSWORD \
  -t "factory1/line1/cnc1/telemetry" -q 1 -m '{"spindle_rpm": 8000}'

Paylaşılan ortamlarda parolaları kabuk geçmişine yazmaktan kaçının. Mosquitto 2.x seçenekleri bir yapılandırma dosyasından okur: -u ve -P satırlarını kısıtlayıcı izinlerle ~/.config/mosquitto_pub (ve mosquitto_sub) dosyasına koyun.

MQTT 5 Özellikleri

24. Content type, user property ve mesaj sona erme süresi

mosquitto_pub $H -V 5 -i pub-x7q2 -t "$T/kitchen/temperature" -m '{"value": 22}' \
  -D PUBLISH content-type application/json \
  -D PUBLISH user-property source cli-test \
  -D PUBLISH message-expiry-interval 60

Subscriber tarafında özellikleri -V 5 -F "%t %p | %P" ile görüntüleyin (%P user property'leri yazdırır). MQTT 5 özellikleri rehberi her özelliğin ne zaman faydalı olduğunu açıklar.

25. mosquitto_rr ile istek/yanıt

# Yanıtlayıcı: her isteğin response topic'ini (%R) okuyup yanıtlar
while true; do
  RT=$(mosquitto_sub $H -V 5 -i resp-x7q2 -t "$T/rpc/time" -C 1 -F "%R")
  mosquitto_pub $H -V 5 -i resp-pub-x7q2 -t "$RT" -m "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
done &

# İstekçi: response topic'i ayarlar, tek bir yanıt bekler ve yazdırır
mosquitto_rr $H -V 5 -i req-x7q2 -t "$T/rpc/time" -e "$T/rpc/time/reply" -m "now?" -W 5

mosquitto_rr, istekte MQTT 5 response topic'ini ayarlar, ona abone olur ve ilk yanıtı yazdırır. Kabuk yanıtlayıcısı bir demo için yeterlidir; Python veya Node ile yazılmış gerçek bir servis, eşzamanlı isteklerin eşleştirilebilmesi için correlation data'yı da geri yansıtır.

Hızlı Seçenek Başvurusu

Seçenek Araç Anlamı
-h, -p ikisi de Host ve port (1883 TCP, 8883 TLS)
-i ikisi de Client ID (her zaman ayarlayın)
-t, -m ikisi de / pub Topic, mesaj
-q ikisi de QoS 0, 1 veya 2
-r, -n pub Retain bayrağı, null (boş) payload
-c, -x sub Clean session'ı devre dışı bırakma, oturum sona erme süresi (MQTT 5)
-v, -F sub Topic'i yazdırma, özel format
-C, -W sub N mesajdan sonra çıkış, saniye cinsinden zaman aşımı
-R, --retained-only, --remove-retained sub Retained mesaj yönetimi
-V 5, -D ikisi de MQTT 5 ve özellikler
-d ikisi de Protokol debug çıktısı
-k ikisi de Saniye cinsinden keep-alive

Sorun Giderme

  • Connection Refused: identifier rejected: boş veya geçersiz client ID. -i ile benzersiz bir değer verin.
  • Bağlantı, bağlandıktan hemen sonra kopuyor: başka bir süreç aynı client ID'yi kullanıyor.
  • 8883 portunda Error: Connection refused: --capath veya --cafile seçeneğini unuttunuz; bu yüzden istemci TLS portunda düz TCP denedi.
  • Hiçbir şey gelmiyor: abonelik filtresini ve yayın topic'ini karakter karakter karşılaştırın; MQTT topic'leri büyük/küçük harfe duyarlıdır ve baştaki bir / fazladan boş bir seviye oluşturur.
  • Mesajlar bir patlamadan sonra duruyor: herkese açık broker sınırları (istemci başına saniyede 10 mesaj, istemci başına 10 abonelik, 8 topic seviyesi).

Testlerden Üretime Geçiş

Herkese açık MQTT test broker bu komutları öğrenmek için mükemmeldir, ancak sahadaki cihazlar özel kimlik bilgilerine ve izolasyona ihtiyaç duyar. ConnectMQ'nun barındırılan MQTT broker hizmeti size 8883'te TLS, 8083 ve 8084'te WebSocket, MQTT 3.1.1 ve 5.0 ile broker başına üretilen kimlik bilgileri sunar; yukarıdaki her komut, 23. örnekteki bayrakları eklediğinizde çalışır. Diğer komut satırı seçenekleri için MQTT CLI araçları karşılaştırmasını okuyun; grafik arayüz tercih ediyorsanız masaüstü MQTT explorer uygulamalarına göz atın. MQTT istemci kütüphaneleri rehberi bu testleri koda nasıl taşıyacağınızı gösterir.

ConnectMQ ile Başlayın

app.connectmq.com adresinde kredi kartı gerekmeden ücretsiz Serverless planda özel bir broker oluşturun. Üretilen kullanıcı adını, parolayı ve client ID'yi 22. ve 23. örneklere kopyalayın ve her mesajı doğrulamak için mosquitto_sub ile birlikte portalın canlı topic gezginini kullanın.

Sık Sorulan Sorular

Yayın yaptığımda mosquitto_sub neden hiçbir şey göstermiyor?

Çoğunlukla topic filtresi eşleşmiyordur: büyük/küçük harfi, eğik çizgileri ve joker karakterleri kontrol edin. Ayrıca iki istemcinin farklı client ID'ler kullandığından emin olun ve aboneliğin kabul edilip edilmediğini görmek için -d ekleyin.

mosquitto_pub ile payload içermeyen bir mesajı nasıl gönderirim?

-n kullanın. -r ile birlikte kullanıldığında o topic'teki retained mesajı siler.

mosquitto_pub MQTT 5 kullanabilir mi?

Evet, Mosquitto 1.6'dan itibaren. -V 5 (veya -V mqttv5) ekleyin ve özellikleri -D <command> <property> <value> ile ayarlayın.

Bu komutları kullanmak için Mosquitto broker'ın kurulu olması gerekir mi?

Hayır. mosquitto-clients paketi yalnızca komut satırı istemcilerini içerir ve bunlar ConnectMQ dahil her MQTT broker ile çalışır.

İlgili yazılar

Test, Betik ve Hata Ayıklama için En İyi MQTT CLI Araçları

mosquitto_pub/sub, MQTTX CLI, HiveMQ MQTT CLI, MQTT.js CLI, curl ve mqttui'nin uygulamalı karşılaştırması; betik yazma ve hata ayıklama için doğru aracı seçebilmeniz için aynı test broker.connectmq.com üzerinde çalıştırıldı.

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