Broker testleri

HiveMQ MQTT CLI: Her Broker'ı Terminalden Test Edin

Açık kaynaklı HiveMQ MQTT CLI ile her broker'ı test edin: kurulum, publish ve subscribe, etkileşimli shell ve broker özelliklerini yoklayan mqtt test komutu.

Güncellendi · 8 dk okuma

HiveMQ MQTT CLI: Her Broker'ı Terminalden Test Edin

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

PlatformKomut
macOS (Homebrew)brew install hivemq/mqtt-cli/mqtt-cli
Dockerdocker run --rm -it hivemq/mqtt-cli <komut>
Debian / Ubuntu, RPMhivemq/mqtt-cli GitHub releases sayfasındaki paketler
Java olan her işletim sistemimqtt-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:

Terminal 1 — subscribe olun ve topic'leri gösterin
mqtt sub -h broker.connectmq.com -p 1883 \
  -t 'testmqtt/cli/#' -q 1 -T
Terminal 2 — publish edin
mqtt 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çenekAnlamı
-h, -pHost ve port (varsayılan: localhost, 1883)
-tTopic (pub) veya topic filtresi (sub); birden çoğuna abone olmak için -t'yi tekrarlayın
-mMesaj payload'ı; -m:file payload.json payload'ı dosyadan okur
-qQoS 0, 1 veya 2
-rRetained olarak publish eder
-iClient identifier
-u, -pwKullanıcı adı ve şifre (dikkat: -P değil, -pw)
-V 3 / -V 5Protokol sürümü; varsayılan MQTT 5'tir
-d, -vGö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

TLS üzerinden kimlik doğrulamalı publish (port 8883)
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:

Güvenli WebSocket üzerinden subscribe
mqtt sub -h broker.connectmq.com -p 8084 -s \
  -ws -ws:path /mqtt \
  -t 'testmqtt/cli/#' -T

Bu ç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 5 özellikleriyle publish
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 shell oturumu
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> exit

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

Özellik testini çalıştırın
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):

Çıktının yapısı
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:

smoke.sh
#!/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 '' -r

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