内存会话插件
内存会话插件为MQTT broker提供基于内存的会话状态管理功能,使用ConcurrentHashMap实现线程安全的会话存储。
-
MemorySessionStateProvider:
-
使用ConcurrentHashMap存储会话状态(key=clientId, value=SessionState)
-
提供store/get/remove三个核心方法管理会话生命周期
-
线程安全设计,适合高并发场景
-
SessionPlugin:
-
插件入口,初始化时注册MemorySessionStateProvider
-
遵循smartboot插件规范,实现版本和厂商信息
适用于需要轻量级、高性能会话管理的MQTT broker场景,特点包括:
- 内存存储,访问速度快
- 无持久化需求
- 单机部署环境
无需额外配置,引入插件后自动生效。
会话管理泳道图
Section titled “会话管理泳道图”sequenceDiagram
autonumber
participant Client as MQTT客户端
participant Broker as MQTT Broker
participant Plugin as 内存会话插件
participant Store as ConcurrentHashMap<br/>(会话存储)
%% 连接阶段
rect rgb(230, 245, 255)
Note over Client,Store: 连接阶段 - 会话建立
Client->>Broker: 1. CONNECT<br/>(cleanSession=0/1)
Broker->>Plugin: 2. 创建/恢复会话请求
alt cleanSession=1 或 新会话
Plugin->>Store: 3a. 创建新会话<br/>(SessionState)
else cleanSession=0 且 会话存在
Plugin->>Store: 3b. 查找已有会话
Store-->>Plugin: 返回会话状态
Plugin->>Plugin: 恢复会话状态<br/>(未确认消息/订阅)
end
Plugin-->>Broker: 4. 会话就绪
Broker-->>Client: 5. CONNACK<br/>(sessionPresent)
end
%% 消息处理阶段
rect rgb(255, 245, 230)
Note over Client,Store: 消息处理阶段 - 状态更新
Client->>Broker: 6. PUBLISH QoS>0
Broker->>Plugin: 7. 更新会话状态
Plugin->>Store: 8. 更新inflight队列<br/>存储消息ID
Store-->>Plugin: 确认存储
Plugin-->>Broker: 9. 状态更新完成
Broker-->>Client: 10. PUBACK/PUBREC
end
%% 断开连接阶段
rect rgb(255, 230, 230)
Note over Client,Store: 断开阶段 - 资源管理
Client->>Broker: 11. DISCONNECT 或 连接丢失
Broker->>Plugin: 12. 处理断开事件
alt cleanSession=1
Plugin->>Store: 13a. 从Map移除会话
Store->>Store: 释放内存资源
else cleanSession=0
Plugin->>Store: 13b. 保留会话状态<br/>(等待重连)
end
Plugin-->>Broker: 14. 断开处理完成
end
- 会话存储: 根据cleanSession标志决定创建新会话或恢复已有会话
- 内存管理: 使用ConcurrentHashMap实现线程安全的会话数据存储
- 状态持久: 对于QoS>0的消息,更新inflight队列并持久化会话状态
- 资源释放: cleanSession=1时完全清理会话,否则保留以供重连恢复