MQTT reason code sorgulama
0x87, 135 ya da “Connection refused: not authorized” mı aldınız? Ne anlama geldiğini ve nasıl düzeltileceğini görmek için tüm MQTT 5 reason code’larında ve MQTT 3.1.1 return code’larında arama yapın.
- CONNACK
Sunucu kullanıcı adını veya şifreyi reddetti.
Nasıl düzeltilir: Kimlik bilgilerini tekrar kontrol edin (sondaki boşluklara ve büyük/küçük harfe dikkat edin) ve kullanıcının broker şifre dosyasında veya kimlik doğrulama backend’inde bulunduğunu doğrulayın.
İpucu: Broker’ı siz yönettiğinizde kullanıcı bazlı kimlik bilgilerini ve topic ACL’lerini doğru kurmak çok daha kolaydır — ConnectMQ ikisini de tek bir panelden yönetmenizi sağlar.
- CONNACKPUBACKPUBRECSUBACKUNSUBACKDISCONNECT
Client’ın bu işlemi yapmasına izin verilmiyor — bağlanmak, o topic’e publish etmek ya da o filter’a abone olmak.
Nasıl düzeltilir: Bu kullanıcı ve topic için broker ACL’ini kontrol edin. CONNACK’te genellikle anonim erişimin kapalı olduğu ve kimlik bilgisi gönderilmediği anlamına gelir.
İpucu: Broker’ı siz yönettiğinizde kullanıcı bazlı kimlik bilgilerini ve topic ACL’lerini doğru kurmak çok daha kolaydır — ConnectMQ ikisini de tek bir panelden yönetmenizi sağlar.
- CONNACK
Client ID biçim olarak doğru, ancak sunucu kabul etmiyor (çok uzun, geçersiz karakterler ya da izin verilmediği hâlde boş).
Nasıl düzeltilir: Kısa, alfanümerik bir client ID kullanın (en fazla 23 karakter her zaman güvenlidir) ya da boş ID ve clean start ile broker’ın bir ID atamasına izin verin.
- DISCONNECT
Aynı client ID ile başka bir bağlantı kuruldu, bu yüzden bu bağlantı düşürüldü.
Nasıl düzeltilir: Her cihaza ve her tarayıcı sekmesine benzersiz bir client ID verin. Aynı ID’yi paylaşan iki client, döngü hâlinde birbirinin bağlantısını keser.
- DISCONNECT
Keep Alive aralığının 1,5 katı süre içinde hiçbir paket alınmadığı için bağlantı kapatıldı.
Nasıl düzeltilir: Client döngünüzün çalıştığından (PINGREQ gönderildiğinden) emin olun, ağ thread’ini bloklamaktan kaçının ya da keep alive aralığını artırın.
- CONNACKPUBACKPUBRECSUBACKUNSUBACKDISCONNECT
Bir şey başarısız oldu ve sunucu nedenini söylemek istemiyor (ya da söyleyemiyor).
Nasıl düzeltilir: Broker log’larını kontrol edin — genellikle asıl nedeni içerirler. Gönderildiyse Reason String property’sine de bakın.
- CONNACKPUBACKPUBRECSUBACKDISCONNECT
Uygulamaya özgü veya idari bir kota aşıldı (mesajlar, bağlantılar, depolama, …).
Nasıl düzeltilir: Planınızı veya broker kotalarını kontrol edin, mesaj hacmini azaltın ya da operatörden limiti artırmasını isteyin.
İpucu: Broker’ı siz yönettiğinizde kullanıcı bazlı kimlik bilgilerini ve topic ACL’lerini doğru kurmak çok daha kolaydır — ConnectMQ ikisini de tek bir panelden yönetmenizi sağlar.
- CONNACK
Client’ın bağlanma yetkisi yok.
Nasıl düzeltilir: Anonim erişim kapalıysa kimlik bilgilerini gönderin ve bu kullanıcı için broker ACL’ini kontrol edin.
İpucu: Broker’ı siz yönettiğinizde kullanıcı bazlı kimlik bilgilerini ve topic ACL’lerini doğru kurmak çok daha kolaydır — ConnectMQ ikisini de tek bir panelden yönetmenizi sağlar.
MQTT reason code’ları nasıl çalışır?
Reason code, broker’ın (veya client’ın) bir işlemin nasıl sonuçlandığını bildirmek için geri gönderdiği tek bir byte’tır. MQTT 5’te CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBACK, UNSUBACK, DISCONNECT ve AUTH paketlerinde yer alır. Kural basittir: 0x80’in altındaki değerler başarı anlamına gelir (bazen 0x10 No matching subscribers gibi ek bilgiyle birlikte), 0x80 ve üzeri ise hata anlamına gelir. Aynı sayı, izin verildiği her pakette aynı anlamı taşır; yani 0x87 bağlantıda, publish’te ya da subscribe’da dönmesinden bağımsız olarak her zaman “Not authorized” demektir.
MQTT 3.1.1 çok daha az konuşkandır. Yalnızca CONNACK bir return code (0–5) taşır; SUBACK ise yalnızca “granted QoS 0/1/2” ya da 0x80 Failure diyebilir. Reddedilen bir QoS 0 publish sessizce düşürülür ve birçok broker hata durumunda TCP bağlantısını doğrudan kapatır; bu yüzden çoğu zaman tek ipucunuz broker log’udur. Hassas hata raporlamasına ihtiyacınız varsa MQTT 5’e geçmeye değer.
Kütüphanenizin gösterdiği kodları okumak
Client kütüphaneleri kodları farklı biçimlerde yazdırır. Paho Python ondalık değerler gösterir (rc=135), MQTT.js genellikle ondalık sayıyı bir mesajla birlikte gösterir, Mosquitto’nun komut satırı araçları ise “Connection Refused: not authorised” gibi metinler yazdırır. Yukarıdaki arama kutusu bunların hepsini kabul eder: 135, 0x87, 87 ya da keep alive gibi bir ifade yazın. MQTT 5’te broker ayrıca insan tarafından okunabilir bir açıklama içeren Reason String property’sini de ekleyebilir; bunu log’layın, çünkü çoğu zaman kodun kendisinden daha açıklayıcıdır.
En sık karşılaşacağınız hatalar
- 0x86 / return code 4 — hatalı kullanıcı adı veya şifre. Yazım hatalarını, sondaki boşlukları ve büyük/küçük harfi kontrol edin. Şifre dosyalarını kurmak için Mosquitto kimlik doğrulama rehberine bakın.
- 0x87 / return code 5 — yetkisiz. Kimlik bilgileri doğru olabilir, ancak ACL topic’i engelliyordur ya da broker anonim client’ları reddediyordur.
- 0x8E — session taken over. İki client aynı client ID’yi kullanıyor. Client ID oluşturucu ile benzersiz ID’ler üretin.
- 0x8D — keep alive zaman aşımı. Client paket göndermeyi bıraktı. MQTT keep alive’ın nasıl çalıştığını okuyun.
- 0x95 — paket çok büyük. Mesaj boyutunuzu paket boyutu hesaplayıcı ile kontrol edin.
Birçok bağlantı sorunu reason code aşamasına hiç ulaşmaz — DNS hataları, yanlış portlar ve TLS handshake hataları MQTT başlamadan önce gerçekleşir. Bunlar için yaygın MQTT bağlantı hatalarına ve MQTT portları referansına bakın ya da sorunu, CONNACK sonucunu log’unda gösteren online MQTT client ile yeniden üretin.
Tüm MQTT 5 reason code’ları
OASIS MQTT 5.0 spesifikasyonunun 2.4. bölümünde tanımlanan tüm reason code’lar. Bir koda #0x87 ile link verebilirsiniz.
| Kod | Ad | Paketler | Anlamı ve çözümü |
|---|---|---|---|
| 0x00 ondalık 0 | Success Başarılı | CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, UNSUBACK, AUTH | İşlem başarıyla tamamlandı. Çözüm: Düzeltilecek bir şey yok — bu normal sonuçtur. |
| 0x00 ondalık 0 | Normal disconnection Normal bağlantı kesme | DISCONNECT | Bağlantı bilerek kapatıldı ve Will Message gönderilmez. Çözüm: Düzeltilecek bir şey yok. Bağlantının kesilmesini beklemiyorsanız hangi tarafın gönderdiğini ve nedenini kontrol edin. |
| 0x00 ondalık 0 | Granted QoS 0 QoS 0 verildi | SUBACK | Abonelik, en fazla QoS 0 ile kabul edildi. Çözüm: QoS 1 veya 2 istediyseniz broker seviyenizi düşürmüştür — broker’ın maksimum QoS ayarını kontrol edin. |
| 0x01 ondalık 1 | Granted QoS 1 QoS 1 verildi | SUBACK | Abonelik, en fazla QoS 1 ile kabul edildi. Çözüm: QoS 2 istediyseniz broker QoS’u 1 ile sınırlıyor — sisteminizi en az bir kez (at-least-once) teslimata göre tasarlayın (idempotent handler’lar). |
| 0x02 ondalık 2 | Granted QoS 2 QoS 2 verildi | SUBACK | Abonelik, en fazla QoS 2 ile kabul edildi. Çözüm: Düzeltilecek bir şey yok — istediğiniz gibi tam olarak bir kez (exactly-once) teslimat elde ettiniz. |
| 0x04 ondalık 4 | Disconnect with Will Message Will Message ile bağlantı kesme | DISCONNECT | Client bağlantıyı kesmek istiyor ancak sunucudan yine de Will Message’ını yayınlamasını istiyor. Çözüm: Düzeltilecek bir şey yok — bu, client’ın bilinçli bir tercihidir. |
| 0x10 ondalık 16 | No matching subscribers Eşleşen abone yok | PUBACK, PUBREC | Mesaj kabul edildi, ancak şu anda bu topic’e abone olan kimse yok. Çözüm: Bu bir hata değil. Abonenin bağlı olduğunu ve topic filter’ının topic ile birebir eşleştiğini (büyük/küçük harfe duyarlı) kontrol edin. |
| 0x11 ondalık 17 | No subscription existed Abonelik mevcut değildi | UNSUBACK | Client, abone olmadığı bir topic filter’ından aboneliği kaldırmaya çalıştı. Çözüm: Unsubscribe filter’ının, abone olurken kullandığınız filter ile byte byte aynı olduğundan emin olun. |
| 0x18 ondalık 24 | Continue authentication Kimlik doğrulamaya devam | AUTH | Gelişmiş kimlik doğrulama sürüyor ve bir AUTH adımı daha gerekiyor. Çözüm: Client’ınız, kimlik doğrulama yönteminin bir sonraki adımını içeren bir AUTH paketiyle yanıt vermelidir. |
| 0x19 ondalık 25 | Re-authenticate Yeniden kimlik doğrulama | AUTH | Client, mevcut bir bağlantıda gelişmiş kimlik doğrulamanın yeniden yapılmasını istiyor. Çözüm: Düzeltilecek bir şey yok — süresi dolan token’lar gibi kimlik bilgilerini yenilemek için kullanılır. |
| 0x80 ondalık 128 | Unspecified error Belirtilmemiş hata | CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT | Bir şey başarısız oldu ve sunucu nedenini söylemek istemiyor (ya da söyleyemiyor). Çözüm: Broker log’larını kontrol edin — genellikle asıl nedeni içerirler. Gönderildiyse Reason String property’sine de bakın. |
| 0x81 ondalık 129 | Malformed Packet Hatalı biçimlendirilmiş paket | CONNACK, DISCONNECT | Alınan paket MQTT spesifikasyonuna uymuyor ve ayrıştırılamadı. Çözüm: Client kütüphanenizi güncelleyin, protokol sürümünün eşleştiğinden emin olun ve MQTT olmayan bir porta MQTT (veya TLS portuna düz TCP) konuşmadığınızı kontrol edin. |
| 0x82 ondalık 130 | Protocol Error Protokol hatası | CONNACK, DISCONNECT | Paket doğru ayrıştırıldı ancak bir protokol kuralını ihlal etti; örneğin ikinci bir CONNECT ya da tekrarlanan bir property. Çözüm: Genellikle client kütüphanesindeki bir hatadan veya özel paket kodundan kaynaklanır. Kütüphaneyi güncelleyin ve paketleri sıra dışı göndermekten kaçının. |
| 0x83 ondalık 131 | Implementation specific error Uygulamaya özgü hata | CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT | Paket geçerli, ancak sunucu broker’a özgü bir nedenle reddediyor. Çözüm: Reason String’i ve broker dokümantasyonunu/log’larını okuyun — neden broker’a göre değişir (eklentiler, limitler, politikalar). |
| 0x84 ondalık 132 | Unsupported Protocol Version Desteklenmeyen protokol sürümü | CONNACK | Sunucu, client’ın talep ettiği MQTT protokol sürümünü desteklemiyor. Çözüm: Client’ı MQTT 3.1.1’e (protocol level 4) geçirin ya da broker’ı MQTT 5 destekleyen bir sürüme yükseltin. |
| 0x85 ondalık 133 | Client Identifier not valid Client ID geçersiz | CONNACK | Client ID biçim olarak doğru, ancak sunucu kabul etmiyor (çok uzun, geçersiz karakterler ya da izin verilmediği hâlde boş). Çözüm: Kısa, alfanümerik bir client ID kullanın (en fazla 23 karakter her zaman güvenlidir) ya da boş ID ve clean start ile broker’ın bir ID atamasına izin verin. |
| 0x86 ondalık 134 | Bad User Name or Password Hatalı kullanıcı adı veya şifre | CONNACK | Sunucu kullanıcı adını veya şifreyi reddetti. Çözüm: Kimlik bilgilerini tekrar kontrol edin (sondaki boşluklara ve büyük/küçük harfe dikkat edin) ve kullanıcının broker şifre dosyasında veya kimlik doğrulama backend’inde bulunduğunu doğrulayın. |
| 0x87 ondalık 135 | Not authorized Yetkisiz | CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT | Client’ın bu işlemi yapmasına izin verilmiyor — bağlanmak, o topic’e publish etmek ya da o filter’a abone olmak. Çözüm: Bu kullanıcı ve topic için broker ACL’ini kontrol edin. CONNACK’te genellikle anonim erişimin kapalı olduğu ve kimlik bilgisi gönderilmediği anlamına gelir. |
| 0x88 ondalık 136 | Server unavailable Sunucu kullanılamıyor | CONNACK | MQTT sunucusu şu anda kullanılamıyor. Çözüm: Üstel geri çekilme (exponential backoff) ile yeniden deneyin. Sorun sürerse broker sağlığını, cluster durumunu ve bakım pencerelerini kontrol edin. |
| 0x89 ondalık 137 | Server busy Sunucu meşgul | CONNACK, DISCONNECT | Sunucu aşırı yüklü ve işlemi reddediyor; daha sonra tekrar deneyin. Çözüm: Binlerce cihazın aynı anda yeniden bağlanmaması için geri çekilin ve jitter ile yeniden deneyin. |
| 0x8A ondalık 138 | Banned Yasaklandı | CONNACK | Bu client, yönetici işlemiyle yasaklandı. Çözüm: Broker operatörüyle iletişime geçin. Tekrarlanan başarısız girişler veya kötüye kullanım niteliğindeki trafik, yasaklamaların yaygın nedenleridir. |
| 0x8B ondalık 139 | Server shutting down Sunucu kapanıyor | DISCONNECT | Sunucu kapatılıyor. Çözüm: Backoff ile yeniden bağlanın; aboneliklerin ve kuyruktaki QoS 1/2 mesajların korunması için kalıcı oturum (persistent session) kullanın. |
| 0x8C ondalık 140 | Bad authentication method Hatalı kimlik doğrulama yöntemi | CONNACK, DISCONNECT | CONNECT’teki kimlik doğrulama yöntemi desteklenmiyor veya kullanılan yöntemle eşleşmiyor. Çözüm: Authentication Method property’sini kaldırın ya da broker’ın desteklediği bir yönteme ayarlayın (örn. SCRAM-SHA-256). |
| 0x8D ondalık 141 | Keep Alive timeout Keep alive zaman aşımı | DISCONNECT | Keep Alive aralığının 1,5 katı süre içinde hiçbir paket alınmadığı için bağlantı kapatıldı. Çözüm: Client döngünüzün çalıştığından (PINGREQ gönderildiğinden) emin olun, ağ thread’ini bloklamaktan kaçının ya da keep alive aralığını artırın. |
| 0x8E ondalık 142 | Session taken over Oturum devralındı | DISCONNECT | Aynı client ID ile başka bir bağlantı kuruldu, bu yüzden bu bağlantı düşürüldü. Çözüm: Her cihaza ve her tarayıcı sekmesine benzersiz bir client ID verin. Aynı ID’yi paylaşan iki client, döngü hâlinde birbirinin bağlantısını keser. |
| 0x8F ondalık 143 | Topic Filter invalid Topic filter geçersiz | SUBACK, UNSUBACK, DISCONNECT | Topic filter biçim olarak doğru, ancak bu sunucu tarafından kabul edilmiyor. Çözüm: Wildcard konumlarını kontrol edin (+ bir seviyenin tamamını kaplamalı, # en sonda olmalı) ve broker’ın topic derinliği veya uzunluğu limitlerine bakın. |
| 0x90 ondalık 144 | Topic Name invalid Topic adı geçersiz | CONNACK, PUBACK, PUBREC, DISCONNECT | Topic adı biçim olarak doğru, ancak client veya sunucu tarafından kabul edilmiyor. Çözüm: Asla + veya # içeren bir topic’e publish etmeyin, boş topic’lerden kaçının ve broker’ın topic uzunluğu/derinliği limitlerini kontrol edin. |
| 0x91 ondalık 145 | Packet Identifier in use Paket tanımlayıcısı kullanımda | PUBACK, PUBREC, SUBACK, UNSUBACK | Paket tanımlayıcısı, devam eden başka bir alışveriş için zaten kullanılıyor. Çözüm: Genellikle bir client kütüphanesi hatası veya tutarsız geri yüklenmiş bir oturumdan kaynaklanır. Kütüphaneyi güncelleyin ya da temiz bir oturum (clean session) başlatın. |
| 0x92 ondalık 146 | Packet Identifier not found Paket tanımlayıcısı bulunamadı | PUBREL, PUBCOMP | Paket tanımlayıcısı bilinmiyor — QoS 2 akış durumu kaybolmuş. Çözüm: Oturum durumu kaybolduktan sonra olur (örn. clean start ya da persistence olmadan broker yeniden başlatma). Broker’da persistence’ı etkinleştirin. |
| 0x93 ondalık 147 | Receive Maximum exceeded Receive Maximum aşıldı | DISCONNECT | Alıcının izin verdiğinden daha fazla onaylanmamış QoS 1/2 PUBLISH paketi gönderildi. Çözüm: CONNACK/CONNECT’teki Receive Maximum değerine uyun; client ayarlarınızda havadaki (in-flight) mesaj sayısını sınırlayın. |
| 0x94 ondalık 148 | Topic Alias invalid Topic Alias geçersiz | DISCONNECT | Bir topic alias 0’dı, Topic Alias Maximum’dan büyüktü ya da tanımlanmadan önce kullanıldı. Çözüm: Karşı tarafın bildirdiği Topic Alias Maximum değerine uyun ya da topic alias’ları devre dışı bırakın. |
| 0x95 ondalık 149 | Packet too large Paket çok büyük | CONNACK, DISCONNECT | Paket, alıcının izin verdiği maksimum paket boyutunu aşıyor. Çözüm: Payload’ı küçültün (sıkıştırın, bölün ya da bir referans gönderin) veya broker’ın mesaj boyutu limitini artırın. |
| 0x96 ondalık 150 | Message rate too high Mesaj hızı çok yüksek | DISCONNECT | Client, sunucunun izin verdiğinden daha hızlı publish ediyor. Çözüm: Publish’leri yavaşlatın, ölçümleri daha az mesajda toplayın ya da broker’daki hız limitini artırın. |
| 0x97 ondalık 151 | Quota exceeded Kota aşıldı | CONNACK, PUBACK, PUBREC, SUBACK, DISCONNECT | Uygulamaya özgü veya idari bir kota aşıldı (mesajlar, bağlantılar, depolama, …). Çözüm: Planınızı veya broker kotalarını kontrol edin, mesaj hacmini azaltın ya da operatörden limiti artırmasını isteyin. |
| 0x98 ondalık 152 | Administrative action Yönetici işlemi | DISCONNECT | Bağlantı bir yönetici tarafından kapatıldı. Çözüm: Broker operatörüyle iletişime geçin — biri bu client’ı elle ya da bir yönetim API’si üzerinden düşürdü. |
| 0x99 ondalık 153 | Payload format invalid Payload formatı geçersiz | CONNACK, PUBACK, PUBREC, DISCONNECT | Payload, Payload Format Indicator ile uyuşmuyor (örn. UTF-8 olarak işaretlenmiş ama geçerli UTF-8 değil). Çözüm: Payload Format Indicator = 1 değerini yalnızca payload geçerli UTF-8 metin olduğunda ayarlayın; binary verileri bu işaret olmadan gönderin. |
| 0x9A ondalık 154 | Retain not supported Retain desteklenmiyor | CONNACK, DISCONNECT | Sunucu retained mesajları desteklemiyor, ancak client bir tane gönderdi. Çözüm: Publish’lerde ve Will Message’ta retain bayrağını kaldırın ya da retain destekleyen bir broker kullanın. |
| 0x9B ondalık 155 | QoS not supported QoS desteklenmiyor | CONNACK, DISCONNECT | Client, sunucunun CONNACK’te bildirdiği Maximum QoS’tan daha yüksek bir QoS kullandı. Çözüm: CONNACK’teki Maximum QoS değerini okuyun ve publish’leri (ve Will QoS’u) bu değerde ya da altında yapın. |
| 0x9C ondalık 156 | Use another server Başka bir sunucu kullanın | CONNACK, DISCONNECT | Client geçici olarak başka bir sunucu kullanmalıdır. Çözüm: Server Reference property’sini okuyun ve oraya bağlanın; cluster’lar çalıştırıyorsanız client’ınızda yönlendirmeyi destekleyin. |
| 0x9D ondalık 157 | Server moved Sunucu taşındı | CONNACK, DISCONNECT | Sunucu kalıcı olarak taşındı; client başka bir sunucu kullanmalıdır. Çözüm: Server Reference property’sini kullanarak yapılandırmanızdaki broker hostname’ini güncelleyin. |
| 0x9E ondalık 158 | Shared Subscriptions not supported Paylaşımlı abonelikler desteklenmiyor | SUBACK, DISCONNECT | Sunucu $share/… paylaşımlı aboneliklerini desteklemiyor. Çözüm: Normal abonelikler kullanın ya da yük dengeli tüketiciler için paylaşımlı abonelik destekleyen bir broker tercih edin. |
| 0x9F ondalık 159 | Connection rate exceeded Bağlantı hızı aşıldı | CONNACK, DISCONNECT | Client çok sık bağlanıyor; bağlantı hızı limitine ulaşıldı. Çözüm: Yeniden bağlanmalara jitter’lı üstel backoff ekleyin ve bir yeniden bağlanma döngüsü olup olmadığına bakın (çoğunlukla tekrarlanan client ID’lerden kaynaklanır). |
| 0xA0 ondalık 160 | Maximum connect time Maksimum bağlantı süresi | DISCONNECT | Bu client için izin verilen maksimum bağlantı süresine ulaşıldı. Çözüm: Yeniden bağlanın; kısa yeniden bağlanma sırasında hiçbir şey kaybolmaması için kalıcı oturum kullanmayı düşünün. |
| 0xA1 ondalık 161 | Subscription Identifiers not supported Subscription Identifier desteklenmiyor | SUBACK, DISCONNECT | Sunucu Subscription Identifier property’sini desteklemiyor. Çözüm: SUBSCRIBE’dan Subscription Identifier’ı kaldırın ve mesajları bunun yerine topic’e göre yönlendirin. |
| 0xA2 ondalık 162 | Wildcard Subscriptions not supported Wildcard abonelikleri desteklenmiyor | SUBACK, DISCONNECT | Sunucu + veya # wildcard içeren abonelikleri desteklemiyor. Çözüm: Tam topic adlarına abone olun ya da wildcard aboneliklerini destekleyen bir broker kullanın. |
MQTT 3.1.1 return code’ları
MQTT 3.1.1 spesifikasyonundaki 0–5 arası CONNACK return code’ları ve SUBACK hata kodu.
| Kod | Ad | Paketler | Anlamı ve çözümü |
|---|---|---|---|
| 0 ondalık 0 | Connection Accepted Bağlantı kabul edildi | CONNACK | Broker bağlantıyı kabul etti. Çözüm: Düzeltilecek bir şey yok. |
| 1 ondalık 1 | Connection Refused, unacceptable protocol version Bağlantı reddedildi, kabul edilemeyen protokol sürümü | CONNACK | Broker, client’ın talep ettiği protocol level’ı desteklemiyor. Çözüm: Broker’la eşleşmesi için client’ı MQTT 3.1.1 (level 4) veya 3.1 (level 3) olarak ayarlayın. |
| 2 ondalık 2 | Connection Refused, identifier rejected Bağlantı reddedildi, tanımlayıcı reddedildi | CONNACK | Client ID geçerli bir UTF-8, ancak broker tarafından izin verilmiyor. Çözüm: [0-9a-zA-Z] aralığından 1–23 karakter kullanın ya da clean session = true ile boş bir ID gönderin. |
| 3 ondalık 3 | Connection Refused, server unavailable Bağlantı reddedildi, sunucu kullanılamıyor | CONNACK | Ağ bağlantısı kuruldu, ancak MQTT servisi kullanılamıyor. Çözüm: Backoff ile yeniden deneyin ve broker sağlığını kontrol edin. |
| 4 ondalık 4 | Connection Refused, bad user name or password Bağlantı reddedildi, hatalı kullanıcı adı veya şifre | CONNACK | Kullanıcı adı veya şifre hatalı ya da yanlış biçimde. Çözüm: Kimlik bilgilerini ve kullanıcının broker’ın kimlik doğrulama backend’inde bulunduğunu doğrulayın. |
| 5 ondalık 5 | Connection Refused, not authorized Bağlantı reddedildi, yetkisiz | CONNACK | Client’ın bağlanma yetkisi yok. Çözüm: Anonim erişim kapalıysa kimlik bilgilerini gönderin ve bu kullanıcı için broker ACL’ini kontrol edin. |
| 0x80 ondalık 128 | Failure Başarısız | SUBACK | Abonelik reddedildi — genellikle bir ACL veya geçersiz bir topic filter nedeniyle. Çözüm: Filter söz dizimini ve kullanıcının bu filter’a abone olma izni olduğunu kontrol edin. MQTT 3.1.1 daha fazla ayrıntı vermez; broker log’una bakın. |
Reason code SSS
MQTT reason code 0x87 (135) ne anlama gelir?
0x87, Not authorized (yetkisiz) demektir. CONNACK’te broker bağlantıyı reddetmiştir (çoğunlukla anonim erişim kapalı olduğu ve kimlik bilgisi gönderilmediği için). PUBACK, SUBACK veya DISCONNECT’te ise kullanıcının broker ACL’inde o topic için yetkisi olmadığı anlamına gelir.
Reason code ile return code arasındaki fark nedir?
MQTT 3.1.1’de return code’lar yalnızca CONNACK’te (0–5) ve SUBACK’te (0x00–0x02 ve 0x80) bulunur. MQTT 5 bunların yerine neredeyse her onay paketinde, DISCONNECT’te ve AUTH’ta yer alan reason code’ları getirdi; 0x80 veya üzerindeki değerler her zaman hata belirtir.
Client’ım neden sürekli 0x8E Session taken over ile bağlantıyı kaybediyor?
İki bağlantı aynı client ID’yi kullanıyor. İkincisi bağlandığında broker ilkinin bağlantısını keser. Her ikisi de otomatik olarak yeniden bağlanırsa birbirlerini döngü hâlinde düşürürler. Her cihaza ve her tarayıcı sekmesine benzersiz bir client ID verin.
MQTT 3.1.1’de neden return code 5 alıyorum?
Return code 5, Connection Refused, not authorized (bağlantı reddedildi, yetkisiz) demektir. Broker kimlik doğrulama istiyor ya da kullanıcı erişim kuralları tarafından engelleniyor. Geçerli bir kullanıcı adı ve şifre gönderin; broker ACL’ini veya allow_anonymous ayarını kontrol edin.