Commit a3eee1d
authored
fix(网络组件): 修复MQTT连接握手期被误判失活导致下行全部失败 (#786)
根因: VertxMqttConnection.isAlive() 以 endpoint.isConnected() 判活,
而 vertx 只在发出 CONNACK 时才置位 isConnected,导致连接在握手期
(会话注册阶段)恒被误判为失活,引发两类事故:
1. MqttConnectionSession.registerConnection 的 isAlive 守卫把每个新连接
静默丢弃,会话恒空 -> 上行正常但全部下行报"设备连接已断开";
2. 若仅删守卫让连接入会话,会话管理器注册流程
(doRegister -> getClientAddress -> takeConnection)会把握手中的连接
当死连接 disconnect -> 设备一上线即被断开。
修复(同一契约"isAlive 全生命周期真实"的三个必要组成):
- isAlive(): accept 前以 closed 标志判活,accept 后维持原语义
(vertx connack 在 synchronized 内同步置位 isConnected,语义逐字节一致)
- accept(): CONNACK 发出后再置位 accepted,保证 accepted=>isConnected
恒成立,两种判活依据切换零窗口
- 构造器提前挂接 close/disconnect 回调(vertx 在 CONNECT 处理时即已
接通 socket closeHandler,允许 accept 前注册),closed 标志从创建起权威
- registerConnection 移除 isAlive 准入守卫,失活连接由
takeConnection/onClose 兜底清理
测试: 新增 MqttConnectionSessionTest + VertxMqttConnectionTest 共 10 例,
含真实 VertxMqttConnection 端到端复现注册期杀链(去修复即红)。
全仓库离线编译通过。1 parent 8d92d00 commit a3eee1d
4 files changed
Lines changed: 539 additions & 5 deletions
File tree
- jetlinks-components/network-component/mqtt-component/src
- main/java/org/jetlinks/community/network/mqtt
- gateway/device/session
- server/vertx
- test/java/org/jetlinks/community/network/mqtt
- gateway/device/session
- server/vertx
Lines changed: 4 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
98 | 98 | | |
99 | 99 | | |
100 | 100 | | |
101 | | - | |
102 | | - | |
103 | | - | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
104 | 105 | | |
105 | 106 | | |
106 | 107 | | |
| |||
Lines changed: 19 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
83 | 83 | | |
84 | 84 | | |
85 | 85 | | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
86 | 96 | | |
87 | 97 | | |
88 | 98 | | |
| |||
145 | 155 | | |
146 | 156 | | |
147 | 157 | | |
148 | | - | |
149 | 158 | | |
150 | 159 | | |
151 | 160 | | |
152 | 161 | | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
153 | 165 | | |
154 | 166 | | |
155 | 167 | | |
| |||
343 | 355 | | |
344 | 356 | | |
345 | 357 | | |
346 | | - | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
347 | 364 | | |
348 | 365 | | |
349 | 366 | | |
| |||
0 commit comments