MQTT如何保存离线消息(持久化)

最近做项目的时候需要把一个升级消息保存下来, 好让离线的设备收到后可以进行升级,但是Cleansession=0,Qos=1的情况下依旧无法实现离线保存,想想可能是mqtt服务器那边没有进行这个功能的配置。当时用retain实现了,有点鸡肋,今天项目完成个大概,去找做服务器的兄弟确定了一下,也查询了一些资料,做个简单总结。不过暂未验证。

持久化

实际上,这个功能应该叫做持久化,以mosquitto为例,在配置文件mosquitto.conf中如下:

# =================================================================
# Persistence
# =================================================================

# 消息自动保存的间隔时间
#autosave_interval 1800

# 消息自动保存功能的开关
#autosave_on_changes false

# 持久化功能的开关
persistence true

# 持久化DB文件
#persistence_file mosquitto.db

# 持久化DB文件目录
#persistence_location /var/lib/mosquitto/

理论上Cleansession=0,打开这个开关,配置一下.db应该就可以实现了。
除此之外,可能还需要确保下面两点:
1.subscribe时的Qos=1
2.publish时的Qos=1

关于服务质量

MQTT 的设计初衷是为了在不可靠的网络中运作良好,为不同的场景提供了三个级别的服务质量,允许客户端指定自己想要的可靠性级别。QoS =0:至多一次这是最简单的级别,无需客户端确认,其可靠性与基础网络层 TCP/IP 一致。QoS =1:至少一次,有可能重复确保至少向客户端发送一次信息,不过也可发送多次;在接收数据包时,需要客户端返回确认消息(ACK 包)。这种方式常用于传递确保交付的信息,但开发人员必须确保其系统可以处理重复的数据包。QoS =2:只有一次,确保消息只到达一次这是最不常见的服务质量级别,确保消息发送且仅发送一次。这种方法需要交换4个数据包,同时也会降低消息代理的性能。由于相对比较复杂,在 MQTT 实现中通常会忽略这个级别,请确保在选择数据库或消息代理前检查这个问题。

部分内容引自:MQTT中的mosquitto简单使用以及订阅离线消息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值