Yönetilen MQTT Bulutu

MQTT Broker URL Formatı: mqtt://, mqtts://, ws:// ve wss:// Açıklaması

Bir MQTT broker URL'si şema, host, port ve bazen bir yoldan oluşur. mqtt://, mqtts://, ws:// ve wss:// ifadelerinin ne anlama geldiğini ve her kütüphanenin bunları nasıl beklediğini öğrenin.

mqtt, mqtts, ws ve wss bağlantıları için şema, host, port ve yol bölümlerini gösteren MQTT broker URL diyagramı
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

Bir MQTT broker URL'si istemciye hangi taşıma katmanını kullanacağını, hangi host'a ulaşacağını, hangi portu açacağını ve WebSocket'ler için hangi yolu isteyeceğini söyler. Bu rehberin sonunda herhangi bir MQTT URL'sini okuyup yazabilecek, ortamınız için doğru şemayı ve portu seçebilecek ve "bağlanamıyorum" şikâyetlerinin çoğuna yol açan birkaç hatadan kaçınabileceksiniz.

Bir MQTT Broker URL'sinin Anatomisi

Tam bir MQTT URL'si şöyle görünür:

wss://broker.connectmq.com:8084/mqtt
\_/   \__________________/ \__/\___/
 |            |              |    |
scheme       host           port path
  • Şema (scheme) taşıma katmanını seçer: ham TCP veya WebSocket, düz veya şifreli.
  • Host broker'ın DNS adı veya IP adresidir.
  • Port broker'ın o taşıma katmanı için dinlediği yerdir.
  • Yol (path) yalnızca WebSocket şemaları için geçerlidir; WebSocket yükseltme isteğinin gittiği HTTP yoludur.

Kimlik bilgileri ve client ID genellikle URL'nin parçası değildir. Bazı kütüphaneler mqtt://user:pass@host biçimini kabul eder, ancak bunları ayrı seçenekler olarak geçmek daha nettir ve parolaların loglara sızmasını önler.

Dört Şema

Şema Taşıma Şifreli Geleneksel port ConnectMQ uç noktası
mqtt:// TCP Hayır 1883 mqtt://broker.connectmq.com:1883
mqtts:// TCP + TLS Evet 8883 mqtts://broker.connectmq.com:8883
ws:// WebSocket Hayır Değişken (çoğu zaman 8083 veya 80) ws://broker.connectmq.com:8083/mqtt
wss:// WebSocket + TLS Evet Değişken (çoğu zaman 8084 veya 443) wss://broker.connectmq.com:8084/mqtt

Java ve Eclipse Paho istemcilerinde tcp:// ve ssl:// ifadelerini de görebilirsiniz; bunlar mqtt:// ve mqtts:// ile eşdeğerdir. Bazı araçlar şifreli TCP varyantı için tls:// ifadesini de kabul eder.

1883 ve 8883 portları IANA'da MQTT için kayıtlıdır. WebSocket portları standartlaştırılmamıştır; bu yüzden bunlar için her zaman broker'ın belgelerini kontrol etmeniz gerekir. MQTT portları rehberimiz bu geçmişi daha ayrıntılı ele alıyor.

Doğru Şemayı Seçmek

  • Cihazlar ve sunucular: 8883'te mqtts:// kullanın. En verimli şifreli seçenektir.
  • Tarayıcılar: ham TCP soketleri açamazlar, bu yüzden wss:// kullanmak zorundadırlar. HTTPS üzerinden sunulan sayfalar ws:// bağlantısını karışık içerik (mixed content) olarak reddeder. Bkz. WebSocket üzerinden MQTT.
  • Kısıtlayıcı kurumsal ağlar: giden 8883 engelliyse, wss:// bazen WebSocket'leri anlayan proxy'lerden geçebilir.
  • Yerel test: 1883'te mqtt:// bir laboratuvar ağında veya herkese açık test broker'ında sorun değildir; internet üzerinden kimlik bilgileri için asla kullanılmamalıdır.

WebSocket Yolu Önemlidir

En yaygın tek WebSocket hatası eksik veya yanlış yoldur. Broker'lar WebSocket üzerinden MQTT'yi belirli bir HTTP yolunda sunar ve en yaygın gelenek /mqtt'dir. ConnectMQ hem 8083'te hem de 8084'te /mqtt kullanır. Yol olmadan wss://broker.connectmq.com:8084 adresine bağlanırsanız yükseltme isteği / yoluna gider ve genellikle pek bir şey anlatmayan bir kapanma olayıyla başarısız olur.

İstemciye Göre MQTT Broker URL Örnekleri

MQTT.js ile Node.js ve Tarayıcılar

MQTT.js bir URL ve bir seçenekler nesnesi alır. Bu kod Node.js'te mqtts:// ile, tarayıcılarda ise wss:// ile çalışır.

import mqtt from "mqtt";

const isBrowser = typeof window !== "undefined";
const url = isBrowser
  ? "wss://broker.connectmq.com:8084/mqtt"
  : "mqtts://broker.connectmq.com:8883";

const client = mqtt.connect(url, {
  clientId: "YOUR_CLIENT_ID",
  username: "YOUR_USERNAME",
  password: "YOUR_PASSWORD",
  protocolVersion: 5,
  keepalive: 60,
  reconnectPeriod: 2000,
});

client.on("connect", () => {
  console.log("Connected to", url);
  client.subscribe("demo/#", { qos: 1 });
  client.publish("demo/hello", "hi from MQTT.js", { qos: 1 });
});

client.on("message", (topic, payload) => {
  console.log(topic, payload.toString());
});

client.on("error", (err) => console.error("MQTT error:", err.message));

paho-mqtt ile Python

Paho URL'leri ayrıştırmaz; host, port ve taşıma katmanını ayrı ayrı alır. Küçük bir yardımcı fonksiyon bir URL'yi bu parçalara dönüştürür.

import ssl
from urllib.parse import urlparse

import paho.mqtt.client as mqtt

DEFAULT_PORTS = {"mqtt": 1883, "mqtts": 8883, "ws": 8083, "wss": 8084}


def client_from_url(url: str, client_id: str, username=None, password=None):
    u = urlparse(url)
    scheme = u.scheme.lower()
    transport = "websockets" if scheme in ("ws", "wss") else "tcp"
    client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id=client_id,
                         transport=transport, protocol=mqtt.MQTTv5)
    if transport == "websockets":
        client.ws_set_options(path=u.path or "/mqtt")
    if scheme in ("mqtts", "wss"):
        client.tls_set(cert_reqs=ssl.CERT_REQUIRED)
    if username:
        client.username_pw_set(username, password)
    port = u.port or DEFAULT_PORTS[scheme]
    return client, u.hostname, port


def on_connect(client, userdata, flags, reason_code, properties):
    print("Connected:", reason_code)


client, host, port = client_from_url(
    "wss://broker.connectmq.com:8084/mqtt",
    client_id="YOUR_CLIENT_ID",
    username="YOUR_USERNAME",
    password="YOUR_PASSWORD",
)
client.on_connect = on_connect
client.connect(host, port, keepalive=60)
client.loop_forever()

Komut Satırı

Mosquitto araçları URL değil host ve port alır; ancak yeni sürümler URL ile birlikte -L seçeneğini de kabul eder:

# Herkese açık broker'a karşı düz TCP
mosquitto_sub -h broker.connectmq.com -p 1883 -i cli-sub-r4t9 -t 'connectmq/demo/r4t9/#' -v

# URL biçimini kullanarak kimlik bilgileriyle TLS
mosquitto_sub -L mqtts://YOUR_USERNAME:YOUR_PASSWORD@broker.connectmq.com:8883/devices/# \
  -i YOUR_CLIENT_ID --capath /etc/ssl/certs -v

-L ile porttan sonraki yol bölümü bir WebSocket yolu değil, topic'tir.

Arduino ve ESP32

PubSubClient gibi gömülü kütüphaneler de host ve portu ayrı ayrı alır. Bağlantının şifreli olup olmadığı bir URL şemasına değil, ağ istemcisine bağlıdır: 1883 için WiFiClient, 8883 için WiFiClientSecure. ESP32 bulut MQTT broker eğitimi tam TLS kurulumunu gösteriyor.

Node-RED

mqtt-broker yapılandırma düğümünde Server alanını broker.connectmq.com, Port alanını 1883 veya 8883 olarak ayarlayın ve 8883 için "Use TLS" seçeneğini işaretleyin. WebSocket'ler için bunun yerine Server alanına tam URL olan wss://broker.connectmq.com:8084/mqtt değerini girin.

Sorun Giderme Kontrol Listesi

Bir bağlantı başarısız olduğunda bunları sırayla kontrol edin:

  1. Şema ve port uyumlu mu. 1883'te mqtts:// veya 8883'te mqtt:// başarısız olur ya da takılır.
  2. WebSocket yolu mevcut mu. broker.connectmq.com'da /mqtt.
  3. TLS için IP değil hostname. Sertifika hostname için verilmiştir; IP ile bağlanmak doğrulamada başarısız olur.
  4. HTTPS sayfalarından ws:// yok. Tarayıcılar bunu karışık içerik olarak engeller.
  5. Güvenlik duvarı porta izin veriyor mu. Kurumsal ağlar giden 1883 ve 8883'ü çoğu zaman engeller.
  6. Client ID boş değil ve benzersiz mi. Yinelenen ID'ler bağlantı kopma döngülerine neden olur.
  7. Kimlik bilgileri URL'den ayrı mı; kütüphane URL'de kimlik bilgilerini belgelemiyorsa ayrı tutun, belgeliyorsa özel karakterleri URL kodlamasıyla yazın.
  8. İstemcinin CA deposu sunucu sertifikasına güveniyor mu. broker.connectmq.com, standart sistem depolarının güvendiği bir Let's Encrypt sertifikası kullanır.

Broker URL'sini Yapılandırmada Saklamak

Bir URL'yi kaynak koduna sabit yazmak, ortam değişikliklerini zahmetli hâle getirmenin en hızlı yoludur. Aynı kodun geliştirme sırasında herkese açık test alanına, staging'de özel bir broker'a ve üretimde dedicated bir uç noktaya yönelebilmesi için tam URL'yi, kimlik bilgilerini ve client ID'yi yapılandırmada tutun.

Basit bir ortam değişkeni düzeni çoğu servis için işe yarar:

export MQTT_URL="mqtts://broker.connectmq.com:8883"
export MQTT_USERNAME="YOUR_USERNAME"
export MQTT_PASSWORD="YOUR_PASSWORD"
export MQTT_CLIENT_ID="YOUR_CLIENT_ID"

Ardından bunları başlangıçta okuyun; örneğin Node.js'te mqtt.connect(process.env.MQTT_URL, { clientId: process.env.MQTT_CLIENT_ID, username: process.env.MQTT_USERNAME, password: process.env.MQTT_PASSWORD }) ile veya Python'da yukarıdaki client_from_url yardımcısıyla. Birkaç alışkanlık bunu sağlam kılar:

  • Başlangıçta doğrulayın. Bağlanmayı denemeden önce bilinmeyen bir şemayı veya yolu olmayan bir WebSocket URL'sini reddedin ve yanlış yapılandırma açıkça görülsün diye şemayı, host'u ve portu (parolayı asla) loglayın.
  • Gizli bilgileri URL'den ayrı tutun. Parolayı gizli bilgi yöneticinizde, URL'yi sıradan yapılandırmada saklayın; böylece URL loglarda ve dashboard'larda güvenle görünebilir.
  • Taşıma katmanı başına değil, ortam başına bir değişken kullanın. Bir tarayıcı derlemesi wss://, backend ise mqtts:// gerektiriyorsa, birini diğerinden dize değiştirmeyle türetmek yerine her dağıtılabilir birime kendi ayarını verin.
  • Beklenen formatı belgeleyin. Ayarın yanına scheme://host:port[/path] gibi tek satırlık bir yorum eklemek, bir sonraki geliştiriciyi tahmin yürütmekten kurtarır.

Herkese Açık ve Özel URL'ler

Herkese açık test alanı ve özel broker'lar için hostname aynıdır; bu da örnekleri basit tutar. Herkese açık MQTT test broker'ında benzersiz herhangi bir client ID ve connectmq/demo/r4t9/... gibi benzersiz bir topic önekiyle anonim olarak bağlanırsınız; oradaki her şey herkes tarafından okunabilir. Özel bir ConnectMQ broker'ı aynı URL'yi sizin için üretilmiş kullanıcı adı, parola ve client ID ile kullanır ve trafiğiniz kendi izole kiracınızda kalır. Barındırma seçeneklerinin büyük resmi için bulut MQTT broker rehberine ve bir MQTT broker'ın ne yaptığına dair genel bakışımıza göz atın.

ConnectMQ'da Kendi Broker URL'nizi Alın

app.connectmq.com adresinde kredi kartı olmadan ücretsiz bir Serverless broker oluşturun. Portal, üretilen kimlik bilgileriyle birlikte dört şemanın tamamı için uç noktalarınızı gösterir ve tarayıcı içi istemcisi bir wss:// bağlantısını hemen test etmenizi sağlar. ConnectMQ her uç noktada MQTT 3.1.1 ve 5.0'ı destekler.

Sık Sorulan Sorular

mqtt:// ile mqtts:// arasındaki fark nedir?

mqtt:// genellikle 1883 portunda düz TCP'dir. mqtts:// aynı protokolü genellikle 8883 portunda TLS ile sarar ve kimlik bilgilerini ve payload'ları şifreler.

wss:// bağlantım neden hata mesajı olmadan başarısız oluyor?

En yaygın neden eksik WebSocket yoludur. URL'ye /mqtt ekleyin ve portun güvenli WebSocket portu (ConnectMQ'da 8084) olduğunu teyit edin.

Kullanıcı adını ve parolayı MQTT URL'sine koyabilir miyim?

Bazı kütüphaneler scheme://user:pass@host:port biçimini destekler, ancak ayrı seçenekler daha güvenlidir ve gizli bilgilerin loglara sızmasını önler.

tcp:// ile mqtt:// aynı şey mi?

Evet. Java ve Paho istemcileri tcp:// ve ssl:// kullanır; bunlar mqtt:// ve mqtts:// ifadelerine karşılık gelir.

İlgili yazılar

BYOC MQTT Broker: Kendi Bulutunuzu Getirin Modeli Açıklandı

BYOC MQTT broker sizin bulut hesabınızda çalışır ama bir sağlayıcı tarafından işletilir. Modelin nasıl işlediğini, sorumluluk paylaşımını ve hesabınızı buna nasıl hazırlayacağınızı öğrenin.

7 dk okuma

Google Cloud IoT Core Alternatifi: Kapanış Sonrası Seçenekler ve Geçiş

Google, Cloud IoT Core'u Ağustos 2023'te kullanımdan kaldırdı. Bu rehber gerçekçi alternatifleri karşılaştırıyor, IoT Core kavramlarını standart MQTT'ye eşliyor ve verileriniz Google Cloud'a akmaya devam ederken cihazlarınızı yönetilen bir broker'a nasıl taşıyacağınızı gösteriyor.

7 dk okuma

Saniyede MQTT Mesaj Sayısı: Verim Nasıl Tahmin Edilir ve Ölçülür

MQTT verim planlaması birkaç formüle ve tek bir dürüst ölçüme dayanır. Saniyedeki gelen ve giden mesaj sayısını nasıl tahmin edeceğinizi, tepe değerleri nasıl hesaba katacağınızı ve sonucu bir broker planına nasıl eşleyeceğinizi öğrenin.

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