Broker testleri

MQTTX Rehberi: Masaüstü ve CLI İstemcisiyle Broker Testi

MQTTX'i adım adım öğrenin: bağlantı kurun, MQTT 5 özelliklerini test edin, payload'ları script ile dönüştürün, mqttx CLI ile pub/sub ve bench çalıştırın.

Güncellendi · 9 dk okuma

MQTTX Rehberi: Masaüstü ve CLI İstemcisiyle Broker Testi

MQTTX, EMQ'nun geliştirdiği açık kaynaklı bir MQTT istemcisidir ve üç biçimde gelir: bir masaüstü uygulaması (Windows, macOS, Linux), mqttx adlı bir komut satırı aracı ve bir tarayıcı sürümü. TCP, TLS, WebSocket ve güvenli WebSocket üzerinden MQTT 3.1, 3.1.1 ve 5.0 konuşur ve yalnızca EMQX ile değil, standarda uyan her broker ile çalışır.

Bu rehber, geliştiricilerin bir broker'ı test ederken gerçekten kullandığı kısımları ele alıyor: bağlantıları kurmak, MQTT 5 özelliklerini (property) incelemek, payload'ları script'lerle dönüştürmek ve CLI ile otomatik pub/sub, simüle edilmiş cihazlar ve mqttx bench yük testleri çalıştırmak.

MQTTX kurulumu

SürümKurulumEn uygun kullanım
Masaüstümqttx.app adresinden indirin veya macOS'te brew install --cask mqttxEtkileşimli hata ayıklama, payload'ları yan yana karşılaştırma
CLInpm install -g mqttx-cli veya brew install emqx/mqttx/mqttx-cliScript'ler, CI job'ları, SSH oturumları, hızlı benchmark'lar
WebWeb build'ini kendiniz barındırın veya barındırılan demoyu kullanınYazılım kuramadığınız makineler

CLI'ı mqttx --version ile kontrol edin. Hiçbir şey kurmadan tarayıcıdan hızlıca test etmek istiyorsanız, bu sitedeki online MQTT istemcisi WebSocket üzerinden aynı temel pub/sub işlemlerini yapar.

Masaüstü uygulaması: production ile aynı bağlantılar

New Connection'a tıklayın ve alanları cihazlarınızın kullanacağı değerlerle birebir doldurun — production'dan farklı bir test hiçbir şey kanıtlamaz.

AlanÖrnekNotlar
Hostmqtt:// + broker.connectmq.comProtokol listesinden mqtts://, ws:// veya wss:// seçin
Port1883 / 8883 / 8083 / 8084WebSocket portlarında ayrıca Path /mqtt gerekir
Client IDtestmqtt-desktop-01Benzersiz olmalı; aynı ID'ye sahip istemciler birbirini düşürür
Username / Passwordbroker'ınızın kimlik bilgileriAnonim test endpoint'leri için boş bırakın
SSL/TLS8883 ve 8084 için açıkBroker özel bir CA kullanıyorsa CA dosyasını yükleyin
MQTT Version5.0Eski firmware'i taklit etmek için 3.1.1'e geçin
Clean Start / Session Expirykapalı / 300Kalıcı oturumları test etmek için gerekli

Advanced altında keep-alive, bağlantı zaman aşımı, otomatik yeniden bağlanma ve MQTT 5 için CONNECT özelliklerini bulursunuz: session expiry interval, receive maximum, maximum packet size, topic alias maximum ve user properties. Last Will bölümü will topic'ini, payload'ı, QoS'u, retain bayrağını ve will delay interval'ı ayarlar — Last Will teslimatını test etmek için kullanışlıdır.

Bir bağlantı başarısız olursa hata bağlantı log'unda görünür. MQTT 5 broker'ları bir reason code döndürür; ne anlama geldiğini görmek için reason code sorgulama aracına yapıştırın.

Subscribe ve publish

New Subscription ile testmqtt/mqttx/# gibi bir topic filtresi ekleyin. Her aboneliğe bir renk atanır ve gelen mesajlar eşleşen aboneliğin rengiyle boyanır — çakışan wildcard'ları görmenin en hızlı yolu budur. Bir filtrenin eşleşip eşleşmediğinden emin değil misiniz? Topic matcher ile deneyin.

Pencerenin altında publish kutusu bulunur: topic, QoS, retain bayrağı ve payload. Payload türü seçicisi (Plaintext, JSON, Base64, Hex ve sürüme göre diğerleri) hem giden mesajı nasıl yazdığınızı hem de gelen payload'ların nasıl çözüldüğünü belirler. JSON modu doğrular ve biçimlendirir; bozuk telemetriyi anında yakalarsınız.

MQTT 5 için publish kutusunun yanındaki properties simgesine tıklayarak şunları ayarlayabilirsiniz:

  • Content type ve payload format indicator
  • Message expiry interval
  • Topic alias
  • Request/response için response topic ve correlation data
  • Anahtar/değer çiftleri olarak user properties

Alınan mesajlar özelliklerini mesaj balonunda gösterir; böylece broker'ın bunları iletip iletmediğini doğrulayabilirsiniz. Bu da MQTTX'i MQTT 5 özelliklerini test etmek için kullanışlı bir manuel yardımcı yapar.

Script'ler ve zamanlanmış mesajlar

Script özelliği, bir payload'ı publish edilmeden önce veya alındıktan sonra dönüştüren küçük bir JavaScript fonksiyonu yazmanızı sağlar. Klasik örnek bir sensörü simüle eder:

simulate-sensor.js
/**
 * Her publish'te sıcaklık ve nem değerlerini rastgele değerlerle değiştirir.
 * @param value publish kutusuna yazılan payload, örn. {}
 */
function handlePayload(value) {
  let data = value;
  if (typeof value === 'string') {
    data = JSON.parse(value);
  }
  data.temperature = Math.round(Math.random() * 400) / 10;
  data.humidity = Math.floor(Math.random() * 100);
  return JSON.stringify(data, null, 2);
}

execute(handlePayload);

Script'i kaydedin, bağlantıya uygulayın (gönderilen mesajlar, alınan mesajlar veya her ikisi) ve birkaç saniyede bir publish etmek için Timed Message ile birleştirin. Tam bir istemci yazmadan sahte bir cihazınız olur. Script API'si sürümler arasında değişti; execute tanınmazsa kurulu sürümünüzdeki hazır örneklere bakın.

mqttx CLI

Tekrarlanabilir testlerde MQTTX'in asıl gücü CLI'dadır. Dört alt komut işin çoğunu karşılar: conn, sub, pub ve bench.

Broker'ın bağlantıyı kabul ettiğini kontrol edin
mqttx conn -h broker.connectmq.com -p 1883 \
  -u "$MQTT_USER" -P "$MQTT_PASS" -i testmqtt-cli-check
Terminal 1 — ayrıntılı çıktıyla subscribe
mqttx sub -h broker.connectmq.com -p 1883 \
  -t 'testmqtt/mqttx/#' -q 1 -v
Terminal 2 — retained bir JSON mesajı publish edin
mqttx pub -h broker.connectmq.com -p 1883 \
  -t 'testmqtt/mqttx/sensor-1' -q 1 -r \
  -m '{"temperature":21.5}'

-v her payload'ın yanında topic'i de yazdırır; wildcard kullanırken bu şarttır. İhtiyaç duyacağınız diğer seçenekler:

SeçenekAmaç
-V 3.1.1Varsayılan 5.0 yerine MQTT 3.1.1 kullanır
-l mqtts / -l wssProtokol: mqtt, mqtts, ws, wss
--path /mqttWebSocket yolu (-l ws veya -l wss ile)
--ca ca.crt, --cert, --keyÖzel CA ve istemci sertifikaları (mTLS)
--insecureSertifika doğrulamasını atlar — yalnızca yerel hata ayıklama için
-up "source: ci"Bir MQTT 5 user property ekler
--will-topic, --will-messageLast Will yapılandırır
--save / --configSeçenekleri bir yapılandırma dosyasına kaydeder ve yeniden kullanır

Aynı publish işlemi güvenli WebSocket üzerinden şöyle görünür; bir tarayıcı uygulaması da bunu kullanır:

WSS üzerinden publish
mqttx pub -h broker.connectmq.com -p 8084 -l wss --path /mqtt \
  -u "$MQTT_USER" -P "$MQTT_PASS" \
  -t 'testmqtt/mqttx/ws' -m 'hello over wss'

Tam liste için mqttx pub --help çalıştırın; sürümler arasında zaman zaman flag'ler eklenir veya yeniden adlandırılır.

Simüle edilmiş cihazlar

mqttx simulate, hazır senaryolardan veya kendi script dosyanızdan gerçekçi veriler publish eder. Sürümünüzdeki senaryoları mqttx ls --scenarios ile listeleyin ve birini çalıştırın:

On simüle edilmiş istemci
mqttx simulate -sc tesla -c 10 \
  -h broker.connectmq.com -p 1883 \
  -t 'testmqtt/mqttx/sim/%c'

%c client ID'ye dönüşür; böylece her simüle cihazın kendi topic'i olur. Akışı izlemek için başka bir terminalde testmqtt/mqttx/sim/# topic'ine subscribe olun.

mqttx bench ile yük testi

mqttx bench, bağlantı, publish ve subscribe benchmark'larını tek bir süreçten çalıştırır:

Her 10 ms'de bir olmak üzere 500 bağlantı açın
mqttx bench conn -c 500 -i 10 \
  -h broker.connectmq.com -p 1883 -u "$MQTT_USER" -P "$MQTT_PASS"
Terminal 1 — 50 subscriber
mqttx bench sub -c 50 -t 'testmqtt/bench/%i' -q 1 \
  -h broker.connectmq.com -p 1883
Terminal 2 — her biri 100 ms'de bir mesaj gönderen 50 publisher
mqttx bench pub -c 50 -im 100 -t 'testmqtt/bench/%i' -q 1 \
  -h broker.connectmq.com -p 1883 -m '{"v":1}'

%i istemci indeksidir; yani 7 numaralı publisher 7 numaralı subscriber ile konuşur. Çıktı bağlı istemcileri ve saniyedeki mesaj hızını gösterir; terminal 1'deki alınan mesaj hızı terminal 2'deki gönderim hızının altında kalıyorsa, istemcilerle broker arasında bir şey doymuş demektir. Bu sayıları nasıl okuyacağınızı ve daha güçlü araçları MQTT broker yük testi yazısında bulabilirsiniz.

Masaüstü mü, CLI mı?

  • Masaüstü, keşif yaparken: payload formatlarını karşılaştırmak, birden çok aboneliği izlemek, MQTT 5 özelliklerini elle denemek.
  • CLI, tekrar ederken: shell script'leri, CI pipeline'ları, SSH ile eriştiğiniz sunucular ve bir hata raporuna yapıştırmak istediğiniz her şey.
  • Hiçbiri, assertion gerektiğinde. MQTTX mesajları gösterir ama bir build'i başarısız kılmaz. Otomatik kontroller için mqttx'i çıktıyı denetleyen bir script ile sarın veya bir istemci kütüphanesiyle test yazın — bkz. GitHub Actions'ta MQTT testleri.

MQTTX'i MQTT Explorer, HiveMQ CLI ve diğer araçlarla karşılaştırmak isterseniz masaüstü MQTT istemcileri karşılaştırması yazısına bakın.

MQTTX mesajlarınızı tarayıcıda izleyin

MQTTX, arayüzde tıklamaktan script'li benchmark'lara kadar tüm döngüyü tek bir araç ve tek bir bağlantı ayarı setiyle kapsar. Her ortam için bir bağlantı kaydedin, CLI komutlarınızı firmware'inizin yanında repository'de tutun; herhangi bir broker sorununu bir dakikada yeniden üretebilirsiniz.

Sıkça sorulan sorular

MQTTX ücretsiz mi?

Evet. MQTTX, EMQ tarafından geliştirilen açık kaynaklı (Apache 2.0) bir MQTT istemcisidir. Masaüstü uygulaması, mqttx CLI ve web sürümü yalnızca EMQX ile değil, standarda uyan her broker ile ücretsiz kullanılabilir.

MQTTX CLI varsayılan olarak MQTT 5 mi kullanır?

Evet, mqttx'in güncel sürümleri varsayılan olarak MQTT 5 ile bağlanır. Eski bir broker'ı test etmeniz ya da eski cihazların nasıl bağlandığını yeniden üretmeniz gerektiğinde -V 3.1.1 (veya -V 3.1) parametresini verin.

mqttx bench özel bir yük testi aracının yerini tutar mı?

Tek bir makineden hızlı bağlantı, publish ve subscribe benchmark'ları için evet. Çok yüksek bağlantı sayıları, dağıtık yük üretimi veya ayrıntılı gecikme yüzdelikleri için emqtt-bench gibi özel bir araç ya da kendi script'iniz daha uygundur.