HiveMQ MQTT CLI (mqtt-cli), her MQTT broker'ıyla çalışan, Java tabanlı ve açık kaynaklı bir komut satırı istemcisidir. Komutu kısaca mqtt'dir ve dört alt komut terminalde yapacağınız neredeyse her testi karşılar: mqtt pub, mqtt sub, etkileşimli mqtt shell ve bir broker'ın neleri desteklediğini yoklayan mqtt test.
Bu rehber, aracı nasıl kuracağınızı, TLS ve kimlik bilgileriyle gerçek bir broker'a nasıl bağlanacağınızı, MQTT 5 özelliklerini nasıl kullanacağınızı ve özellik testini nasıl çalıştıracağınızı kopyalayıp yapıştırabileceğiniz komutlarla gösteriyor.
mqtt-cli kurulumu
| Platform | Komut |
|---|---|
| macOS (Homebrew) | brew install hivemq/mqtt-cli/mqtt-cli |
| Docker | docker run --rm -it hivemq/mqtt-cli <komut> |
| Debian / Ubuntu, RPM | hivemq/mqtt-cli GitHub releases sayfasındaki paketler |
| Java olan her işletim sistemi | mqtt-cli-<version>.jar dosyasını indirip java -jar mqtt-cli-<version>.jar çalıştırın |
Güncel sürümler native binary'lerle de gelir; bu yüzden Java her zaman gerekmez. Kurulumu mqtt --version ile kontrol edin. Docker'da imajın entry point'i CLI'ın kendisidir; yani docker run --rm -it hivemq/mqtt-cli pub -h ..., mqtt pub -h ... yerine geçer.
Publish ve subscribe
İki terminal açın. Mesaj geldiğinde dinliyor olması için önce subscriber'ı başlatın:
mqtt sub -h broker.connectmq.com -p 1883 \
-t 'testmqtt/cli/#' -q 1 -Tmqtt pub -h broker.connectmq.com -p 1883 \
-t 'testmqtt/cli/hello' -m 'Hello from mqtt-cli' -q 1-T (--showTopics) her payload'dan önce topic'i yazdırır; wildcard ile subscribe olurken buna ihtiyacınız olur. En sık kullanacağınız seçenekler:
| Seçenek | Anlamı |
|---|---|
-h, -p | Host ve port (varsayılan: localhost, 1883) |
-t | Topic (pub) veya topic filtresi (sub); birden çoğuna abone olmak için -t'yi tekrarlayın |
-m | Mesaj payload'ı; -m:file payload.json payload'ı dosyadan okur |
-q | QoS 0, 1 veya 2 |
-r | Retained olarak publish eder |
-i | Client identifier |
-u, -pw | Kullanıcı adı ve şifre (dikkat: -P değil, -pw) |
-V 3 / -V 5 | Protokol sürümü; varsayılan MQTT 5'tir |
-d, -v | Gönderilen/alınan paketler dahil hata ayıklama ve ayrıntılı log |
Script'lerde iki subscriber flag'i işe yarar: -J (--jsonOutput) her mesajı topic, QoS ve payload içeren bir JSON nesnesi olarak yazdırır; -of messages.log (--outputToFile) ise her şeyi bir dosyaya ekler. JSON'u jq'ya aktarın; elinizde hızlı bir doğrulama (assertion) aracı olur.
Kimlik bilgileri ve TLS
mqtt pub -h broker.connectmq.com -p 8883 -s \
-u "$MQTT_USER" -pw "$MQTT_PASS" \
-t 'testmqtt/cli/secure' -m 'over TLS'-s (--secure) sistemin güven deposuyla TLS'i etkinleştirir. Özel CA kullanan bir broker için --cafile ca.pem, karşılıklı TLS için --cert client.pem --key client.key ekleyin. Başarısız bir handshake bir Java SSL exception'ı yazdırır — sertifika sorunlarını önce openssl ile ayırmak için TLS bağlantısını test etme yazısına bakın.
WebSocket
Tarayıcı uygulamaları broker'a WebSocket üzerinden ulaşır ve proxy'ler bazen tam olarak bu yolu bozar. Doğrudan test edin:
mqtt sub -h broker.connectmq.com -p 8084 -s \
-ws -ws:path /mqtt \
-t 'testmqtt/cli/#' -TBu çalışıyor ama web uygulamanız çalışmıyorsa sorun broker'da değil, tarayıcıdadır (mixed content, CORS, yanlış URL).
MQTT 5 özellikleri
mqtt pub, MQTT 5 PUBLISH özelliklerini flag olarak sunar; bu da bir broker'ın onları iletip iletmediğini kontrol etmek için kullanışlıdır:
mqtt pub -h broker.connectmq.com -p 1883 \
-t 'testmqtt/cli/props' -m '{"cmd":"reboot"}' -q 1 \
-up 'source=ci' -up 'trace-id=abc123' \
-ct application/json \
-e 60 \
-rt 'testmqtt/cli/replies' -cd 'req-42'Bu komut iki user property, bir content type, 60 saniyelik bir message expiry, bir response topic ve correlation data ayarlar. Subscriber'ı -J ile çalıştırırsanız özellikler çıktıda görünür. MQTT 5 özelliklerini test etme rehberi her özelliğin ne yapması gerektiğini ve nasıl doğrulanacağını açıklar.
Etkileşimli shell
mqtt shell, aynı anda birden çok bağlı istemciyi tutup aralarında geçiş yapabildiğiniz bir REPL başlatır — oturum devralma (session takeover) veya no-local abonelikler gibi etkileşimleri beş terminal açmadan yeniden üretmek için idealdir.
mqtt> con -i sensor-1 -h broker.connectmq.com -p 1883
sensor-1@broker.connectmq.com> sub -t testmqtt/cli/commands -q 1
sensor-1@broker.connectmq.com> con -i backend-1 -h broker.connectmq.com -p 1883
backend-1@broker.connectmq.com> pub -t testmqtt/cli/commands -m 'restart'
backend-1@broker.connectmq.com> switch sensor-1
sensor-1@broker.connectmq.com> ls
sensor-1@broker.connectmq.com> dis
mqtt> exitcon yeni bir istemci bağlar ve onu aktif bağlam yapar; pub, sub ve unsub aktif istemci üzerinde çalışır; switch bağlamı değiştirir; ls bağlı istemcileri listeler; dis bağlantıyı keser. Abone bir istemcinin aldığı mesajlar geldikleri anda shell'de yazdırılır. Hızlı bir deney: aynı -i sensor-1 ile ikinci bir istemci bağlayın ve ilkinin düştüğünü izleyin — klasik yinelenen client ID belirtisi.
mqtt test: broker'ın neleri desteklediğini yoklayın
mqtt test bir broker'a bağlanır ve hangi MQTT özelliklerinin çalıştığını raporlar. "Bu broker MQTT 5'i, QoS 2'yi, retained mesajları ve shared subscription'ları destekliyor mu?" sorusunu yanıtlamanın en hızlı yoludur.
mqtt test -h broker.connectmq.com -p 1883 -u "$MQTT_USER" -pw "$MQTT_PASS"Çıktıda her protokol sürümü için bir bölüm bulunur. Tam düzeni CLI sürümüne bağlıdır ama aşağı yukarı şöyle görünür (değerler broker'a ve yapılandırmaya göre değişir):
MQTT 3: OK
- Maximum topic length: ... bytes
- QoS 0: Received .../10 publishes in ...ms
- QoS 1: ...
- QoS 2: ...
- Retain: OK
- Wildcard subscriptions: OK
- Shared subscriptions: OK
- Payload size: >= ... bytes
- Maximum client id length: ... bytes
MQTT 5: OK
- Connect restrictions:
> Retain: OK
> Wildcard subscriptions: OK
> Shared subscriptions: OK
> Subscription identifiers: OK
> Maximum QoS: 2
> Receive maximum: ...
> Maximum packet size: ... bytes
> Topic alias maximum: ...
> Session expiry interval: ...
> Server keep alive: ...MQTT 5 altındaki "connect restrictions" doğrudan broker'ın gönderdiği CONNACK özelliklerinden gelir; MQTT 3 satırları ise gerçekten publish ve subscribe yapılarak ölçülür. MQTT 5 başarılı olduğunda MQTT 3 testlerini de çalıştırmak için -a (--all), testi tek bir sürümle sınırlamak için -V 3 veya -V 5 ekleyin. Aynı bilgiye kendi araçlarınızda ihtiyacınız varsa, bir broker'ın hangi MQTT özelliklerini desteklediğini test etme yazısı yoklama script'ini Python'da nasıl yazacağınızı gösterir.
Varsayılanlar ve script yazma
Sürekli -h broker.connectmq.com -p 8883 -s yazmak yorucudur. mqtt-cli; host, port, protokol sürümü ve client ID öneki gibi varsayılanları ~/.mqtt-cli/ içindeki bir properties dosyasından okur — tam anahtarlar için sürümünüzün dokümantasyonuna bakın. Varsayılanlar ayarlandığında mqtt pub -t x -m y doğrudan broker'ınıza gider.
Bir shell script'i veya CI job'ı için minimal bir smoke test:
#!/usr/bin/env bash
set -euo pipefail
TOPIC="testmqtt/cli/smoke-$RANDOM"
mqtt pub -h broker.connectmq.com -p 1883 -t "$TOPIC" -m 'ping' -r -q 1
# retained mesaj subscribe olunur olunmaz teslim edilir; 5 sn dinle
OUT=$(timeout 5 mqtt sub -h broker.connectmq.com -p 1883 -t "$TOPIC" -q 1 || true)
echo "$OUT" | grep -q 'ping' && echo "OK" || { echo "FAIL: '$OUT'"; exit 1; }
# retained mesajı temizle
mqtt pub -h broker.connectmq.com -p 1883 -t "$TOPIC" -m '' -rRetained mesaj testi zamanlamadan bağımsız kılar: subscriber, abonelik aktif olur olmaz mesajı alır. Daha fazla kalıp için MQTT bash script'leri ve mosquitto_pub ve mosquitto_sub örnekleri yazılarına bakın; script çalışırken aynı topic'i tarayıcıdan izlemenin hızlı yolu online istemcidir.
mqtt-cli trafiğini tarayıcıda izleyin
mqtt-cli, terminal için sağlam bir varsayılan istemcidir: eksiksiz MQTT 5 flag'leri, çok istemcili senaryolar için bir shell ve yerleşik bir broker özellik testi. Birkaç komutu repository'nizde tutun; ekipteki herkes bir broker sorununu aynı şekilde yeniden üretebilsin.
Sıkça sorulan sorular
HiveMQ MQTT CLI yalnızca HiveMQ ile mi çalışır?
Hayır. pub, sub, shell ve test komutları sıradan MQTT istemcileridir ve Mosquitto, EMQX, VerneMQ ve yönetilen servisler dahil standarda uyan her broker ile çalışır. Yalnızca hivemq ve swarm alt komutları HiveMQ ürünlerine özeldir.
mqtt sub neden hiçbir şey yazdırmıyor?
Genellikle topic filtresi eşleşmiyordur, broker aboneliği bir ACL nedeniyle reddetmiştir ya da publisher farklı bir broker veya port kullanmıştır. Topic'leri göstermek için -T ekleyin, hata ayıklama çıktısı için -d kullanın ve SUBACK reason code'unu kontrol edin.
mqtt-cli ile mosquitto_pub arasındaki fark nedir?
İkisi de terminalden publish ve subscribe yapar. mqtt-cli bunlara ek olarak birden çok adlandırılmış istemci barındıran etkileşimli bir shell, broker özellik testi, JSON çıktısı ve tüm MQTT 5 özellikleri için flag'ler sunar; mosquitto_pub ve mosquitto_sub ise daha küçüktür ve Mosquitto'nun olduğu hemen her yerde kuruludur.



