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 sayfalarws://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:
- Şema ve port uyumlu mu. 1883'te
mqtts://veya 8883'temqtt://başarısız olur ya da takılır. - WebSocket yolu mevcut mu. broker.connectmq.com'da
/mqtt. - TLS için IP değil hostname. Sertifika hostname için verilmiştir; IP ile bağlanmak doğrulamada başarısız olur.
- HTTPS sayfalarından
ws://yok. Tarayıcılar bunu karışık içerik olarak engeller. - Güvenlik duvarı porta izin veriyor mu. Kurumsal ağlar giden 1883 ve 8883'ü çoğu zaman engeller.
- Client ID boş değil ve benzersiz mi. Yinelenen ID'ler bağlantı kopma döngülerine neden olur.
- Kimlik bilgileri URL'den ayrı mı; kütüphane URL'de kimlik bilgilerini belgelemiyorsa ayrı tutun, belgeliyorsa özel karakterleri URL kodlamasıyla yazın.
- İ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 isemqtts://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.



