数据存储设计

一对一消息存储

image

  1. Publish 端发布一条消息;
  2. Backend 将消息记录数据库中;
  3. Subscribe 端订阅主题;
  4. Backend 从数据库中获取该主题的消息;
  5. 发送消息给 Subscribe 端;
  6. Subscribe 端确认后 Backend 从数据库中移除该消息;

一对多消息存储

image

  1. Publish 端发布一条消息;
  2. Backend 将消息记录在数据库中;
  3. Subscribe1 和 Subscribe2 订阅主题;
  4. Backend 从数据库中获取该主题的消息;
  5. 发送消息给 Subscribe1 和 Subscribe2;
  6. Backend 记录 Subscribe1 和 Subscribe2 已读消息位置,下次获取消息从该位置开始。

客户端在线状态存储

支持将设备上下线状态,直接存储到 Redis 或数据库。

客户端代理订阅

支持代理订阅功能,设备客户端上线时,由存储模块直接从数据库,代理加载订阅主题。

存储插件列表

EMQ X 支持 MQTT 消息直接存储 Redis、MySQL、PostgreSQL、MongoDB、Cassandra、DynamoDB、InfluxDB、OpenTSDB 数据库:

存储插件配置文件说明
emqx_backend_redisemqx_backend_redis.confRedis 消息存储
emqx_backend_mysqlemqx_backend_mysql.confMySQL 消息存储
emqx_backend_pgsqlemqx_backend_pgsql.confPostgreSQL 消息存储
emqx_backend_mongoemqx_backend_mongo.confMongoDB 消息存储
emqx_backend_cassaemqx_backend_cassa.confCassandra 消息存储
emqx_backend_dynamoemqx_backend_dynamo.confDynamoDB 消息存储
emqx_backend_influxdbemqx_backend_influxdb.confInfluxDB 消息存储
emqx_backend_opentsdbemqx_backend_opentsdb.confOpenTSDB 消息存储

配置步骤

EMQ X 中支持不同类型的数据库的持久化,虽然在一些细节的配置上有所不同,但是任何一种类型的持久化配置主要做两步操作:

  • 数据源连接配置:这部分主要用于配置数据库的连接信息,包括服务器地址,数据库名称,以及用户名和密码等信息,针对每种不同的数据库,这部分配置可能会有所不同;
  • 事件注册与行为:根据不同的事件,你可以在配置文件中配置相关的行为(action),相关的行为可以是函数,也可以是SQL语句。