发布的消息 订阅者恰好离线,发布端如何知道呢

环境信息

  • EMQ X 版本:4.2 开源
  • 操作系统及版本:
  • 其他

问题描述

java 服务端给某一个设备发送消息,刚发送到broker,设备恰好离线了,那么java服务端如何知道此消息目前没有订阅者呢?

配置文件及日志

可以了解一下mqtt qos的几个值的概念应该就可以解决你的疑问,我认为你想让发布端有没有接收到该消息,需要使用qos=2

问下,如果服务端发送完后,broker还没来的及deliver给设备,设备就下线了,几个月后再上线,那这个消息会一直存在broker中几个月么(qos为i1或者2时)?我这边其实是想知道,如果服务端发给设备端的消息,如果设备没有接收到,那么这个消息就可以废弃了,并且能够通知服务端,这样服务端可以进行重试发布消息

broker不是存储系统,只是一个消息服务器,肯定不会存那么久。session 早就清理了,session 中的消息也就丢失了。

那如果消息丢失,有什么方式能够知道呢?

目前消息丢失只有一个统计条数,在dashbord上可以看到。其实你看一下qos定义(主要发送端和接收端:发布者和订阅者中间的broker既是接收端和发布端):EMQ 学习---MQTT消息QoS - 清明-心若淡定 - 博客园 这个链接里的流程图很清晰了。消息丢失一般都是没有订阅者。如果想业务上的确认是否收到,可以从业务上做个确认消息主题。

好的,谢谢啦