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
-iile 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;x7q2yerine 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.-iile 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:--capathveya--cafileseç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.



