数据持久化

# 持久化接口

  • 接口:io.github.quickmsg.common.message.MessageRegistry

主要提供 session消息 && 保留消息的持久化

方法 说明
List< SessionMessage> getSessionMessages(String clientIdentifier) 获取连接下线后的session消息
void saveSessionMessages(SessionMessage sessionMessage) 保存连接下线后的session消息
void saveRetainMessage(RetainMessage retainMessage) 保留Topic保留消息
List< RetainMessage> getRetainMessage(String topic) 获取Topic保留消息

# 使用数据库去存储session/保留消息

  • 引入DB依赖
    <dependency>
      <groupId>io.github.quickmsg</groupId>
        <artifactId>smqtt-persistent-db</artifactId>
        <version>${Latest version}</version>
    </dependency>
    
1
2
3
4
5
6
  • 引入驱动依赖

根据版本引入 mysql/pg/oracle等驱动依赖

     <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>5.1.35</version>
    </dependency>
1
2
3
4
5
  • 服务启动时config.yaml 配置参数
smqtt:
    db: # 配置参考https://github.com/brettwooldridge/HikariCP/wiki/MySQL-Configuration
        jdbcUrl: jdbc:mysql://localhost:3306/smqtt
        username: root
        password: 123
        dataSourceCachePrepStmts: false
        dataSourcePrepStmtCacheSize: 250
        dataSourcePrepStmtCacheSqlLimit: 2048
        dataSourceUseServerPrepStmts: true
        dataSourceUseLocalSessionState: true
        dataSourceRewriteBatchedStatements: true
        dataSourceCacheResultSetMetadata: true
        dataSourceCacheServerConfiguration: true
        dataSourceElideSetAutoCommits: true
        dataSourceMaintainTimeStats: false

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  • 启动服务后会自动生成session表跟retain表

# 使用Redis去存储session/保留消息

  • 引入依赖
 <dependency>
 	<groupId>io.github.quickmsg</groupId>
 	<artifactId>smqtt-persistent-redis</artifactId>
 	<version>${Latest version}</version>
 </dependency>
1
2
3
4
5
  • config.yaml 配置参数
smqtt:
    redis: # redis 请参考 https://doc.smqtt.cc/%E5%85%B6%E4%BB%96/1.store.html 【如果没有引入相关依赖请移除此配置】
      mode: single
      database: 0
      password:
      timeout: 3000
      poolMinIdle: 8
      poolConnTimeout: 3000
      poolSize: 10
      single:
        address: 127.0.0.1:6379
      cluster:
        scanInterval: 1000
        nodes: 127.0.0.1:7000,127.0.0.1:7001,127.0.0.1:7002,127.0.0.1:7003,127.0.0.1:7004,127.0.0.1:7005
        readMode: SLAVE
        retryAttempts: 3
        slaveConnectionPoolSize: 64
        masterConnectionPoolSize: 64
        retryInterval: 1500
      sentinel:
        master: mymaster
        nodes: 127.0.0.1:26379,127.0.0.1:26379,127.0.0.1:26379
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 自定义实现持久化

resources/META-INF/services 目录下新建 名为io.github.quickmsg.common.message.MessageRegistry文件, 将自定义实现类全限定名写入文件中即可完成注入。

Last Updated: 12/8/2021, 2:48:42 PM