增強端云交互
本文介紹云消息隊列 MQTT 版支持的MQTT 5.0新特性的增強端云交互功能說明。
功能介紹
MQTT 5.0 引入了多項新特性來增強客戶端與服務器(云)之間的交互,比如請求/響應模式、訂閱選項以及改進的錯誤報告等。這些新特性旨在提高通信的靈活性、可靠性和持久性,并為不同的端到云應用場景提供更有效的解決方案。
應用場景
請求/響應交互:客戶端可以向服務器請求數據或執行動作,并從服務器接收響應,就像傳統的HTTP請求/響應模型一樣。
服務質量(QoS)管理:訂閱選項允許客戶端指定最大QoS級別,并控制是否接收保留消息,確保服務質量。
狀態同步:保留消息和會話過期功能能夠幫助客戶端在斷線重連時恢復其會話狀態,提高通信的持久性。
建連交互
建連交互是提供一種設備端和服務端協商的能力,客戶端建連時設置配置參數,服務端回復最終支持的功能以及配置項最后的值。
建連交互 | 參數說明 | 服務端返回 |
是否支持通配訂閱 |
| 1 |
是否支持訂閱標志符 |
| 1 |
是否支持主題別名 |
| 1 |
支持的最高QoS |
| 2 |
連接?;顣r間 | 在保活時間內需要有心跳包或數據包,否則會被斷開連接。 取值范圍:1~8。 單位:分鐘。 | 返回設備設置值。 如果超過最大取值范圍8分鐘,按照8分鐘設置。 |
會話過期時間 | 連接斷開后,會話的保留時間。 取值范圍:0~2147483647。 單位:秒。 | 返回設備設置值。 如果沒有設置則默認為0,斷開連接會話立即過期。如果設置了過期時間則最小過期間隔不少于10分鐘,小于10分鐘的情況下,按照10分鐘設置。 |
最大的數據包長度 | 取值范圍:0~128。 單位:KB。 說明
| 固定值131072,表示128 KB。 |
最大主題別名個數 | 取值范圍:0~30。 |
|
Receive Maximum
MQTT 5.0新增了Receive Maximum屬性,它存在于CONNECT報文與CONNACK報文,表示客戶端或服務端能夠同時處理的QoS為1、QoS為2的PUBLISH報文最大數量,即對端可以使用的最大發送配額,最大值為65535,超過該數值則按照65535設置。
Receive Maximum屬性提供了告訴對端發送QoS為1、QoS為2的PUBLISH的最大數量,對端發現未決PUBLISH個數等于Receive Maximum時,不能再發送QoS為1、QoS為2的PUBLISH消息了,以此來實現流量控制。
服務端主動斷開
在MQTT 5.0中,服務端可以發送主動斷開報文,并支持設置一個錯誤碼及錯誤原因的字符串,用戶可以根據返回的錯誤內容排查具體出錯的原因。
常見錯誤碼
十進制 | 十六進制 | 名稱 | 報文 |
0 | 0x00 | 成功(Success) | CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, UNSUBACK, AUTH |
0 | 0x00 | 正常斷開連接(Normal disconnection) | DISCONNECT |
0 | 0x00 | QoS 0(Granted QoS 0) | SUBACK |
1 | 0x01 | QoS 1(Granted QoS 1) | SUBACK |
2 | 0x02 | QoS 2(Granted QoS 2) | SUBACK |
4 | 0x04 | 與遺囑消息斷連(Disconnect with Will Message) | DISCONNECT |
17 | 0x11 | 不存在訂閱(No subscription existed) | UNSUBACK |
128 | 0x80 | 未指定錯誤(Unspecified error) | CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT |
129 | 0x81 | 畸形報文(Malformed Packet) | CONNACK, DISCONNECT |
130 | 0x82 | 協議錯誤(Protocol Error) | CONNACK, DISCONNECT |
131 | 0x83 | 特定實現錯誤(Implementation specific error) | CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT |
132 | 0x84 | 不支持的協議版本(Unsupported Protocol Version) | CONNACK |
133 | 0x85 | 客戶標識符無效(Client Identifier not valid) | CONNACK |
134 | 0x86 | 用戶名或密碼錯誤(Bad User Name or Password) | CONNACK |
135 | 0x87 | 未經授權(Not authorized) | CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT |
136 | 0x88 | 服務器不可用(Server unavailable) | CONNACK |
137 | 0x89 | 服務器繁忙(Server busy) | CONNACK, DISCONNECT |
138 | 0x8A | 禁止訪問(Banned) | CONNACK |
140 | 0x8C | 錯誤驗證方法(Bad authentication method) | CONNACK, DISCONNECT |
141 | 0x8D | ?;畛瑫r(Keep Alive timeout) | DISCONNECT |
142 | 0x8E | 會話被接管(Session taken over) | DISCONNECT |
143 | 0x8F | 主題過濾無效(Topic Filter invalid) | SUBACK, UNSUBACK, DISCONNECT |
144 | 0x90 | 主題名稱無效(Topic Name invalid) | CONNACK, PUBACK, PUBREC, DISCONNECT |
145 | 0x91 | 正在使用數據包標識符(Packet Identifier in use) | PUBACK, PUBREC, SUBACK, UNSUBACK |
146 | 0x92 | 找不到數據包標識符(Packet Identifier not found) | PUBREL, PUBCOMP |
147 | 0x93 | 超過接收最大值(Receive Maximum exceeded) | DISCONNECT |
148 | 0x94 | 主題別名無效(Topic Alias invalid) | DISCONNECT |
149 | 0x95 | 數據包過大(Packet too large) | CONNACK, DISCONNECT |
150 | 0x96 | 消息速率過高(Message rate too high) | DISCONNECT |
151 | 0x97 | 超出配額(Quota exceeded) | CONNACK, PUBACK, PUBREC, SUBACK, DISCONNECT |
153 | 0x99 | 有效載荷格式無效(Payload format invalid) | CONNACK, PUBACK, PUBREC, DISCONNECT |
154 | 0x9A | 不支持消息保留(Retain not supported) | CONNACK, DISCONNECT |
155 | 0x9B | 不支持的QoS(QoS not supported) | CONNACK, DISCONNECT |
158 | 0x9E | 不支持的共享訂閱(Shared Subscription not supported) | SUBACK, DISCONNECT |
159 | 0x9F | 超出連接速率(Connection rate exceeded) | CONNACK, DISCONNECT |
160 | 0xA0 | 最大連接時間(Maximum connect time) | DISCONNECT |
161 | 0xA1 | 不支持訂閱標識符(Subscription Identifiers not supported) | SUBACK, DISCONNECT |
162 | 0xA2 | 不支持通配符訂閱(Wildcard Subscriptions not supported) | SUBACK, DISCONNECT |