emqx 使用mqtt.js 发送qos1的消息 如果确保发送成功或者失败的回调 谢谢

错误报告

使用mqtt.js 发送qos1的消息 对方客户端不在线的情况下 即 发送的目标topic 没有被订阅 在js 的callback 函数中 未有错误的信息 emqx 对于未上线的设备 或者没有被订阅的主题 topic 消息是直接丢弃吗?控制台显示丢弃 但是看描述 qos1 是需要被消费才能发送确认的 emqx这种情况下是直接确认了吗 pubback了吗 如果想确保消息至少送达一次 或者送达的同步编程 应该如何操作 谢谢

环境

  • EMQX 版本:5.0.15
  • 操作系统版本:windows10

重现此问题的步骤

  1. 代理订阅 一个主题 主题包含{clientid} 以区分不同的设备
  2. 设备A 向设备B(b设备的订阅主题(但是该设备不在线))
  3. 使用官方mqtt client demo程序 mqtt.js websocket版本 连接 发送消息 按理说 消息qos1 应该是必须送达一次 但是消息的回调 并没有错误

预期行为

没有确认消息 重发或者出错

实际行为

没有错误提醒 无法在客户端确认是否成功


功能请求

描述你需要的功能

为什么你需要这个功能


其他

可以看下 QoS 介绍 这篇文档。


这是官方手册文档中关于qos的1的描述
那么这个官方手册中的描述 其实是不准确的 这个接收端 在emqx中实现其实是 broker emqx 本身收到消息 就会做应答对吧 我没有办法通过设置qos1 或者2 来判断消息是否送达吗

送达是指发送方送达至接收方,他的意思是发布端到 Broker 或者 Broker 到订阅端。

消息是否到达订阅端,不是 QoS 1 或 QoS 2 可以保证的,所以对发布端来说这是不可知的。

这个官方手册中的描述 qos1 是不是咱们emqx 并不是这么实现的 我不能通过设置qos 1 或者2 来判断消息是否送达 emqx 本身broker 没有遵守这个手册中的描述 他接收到这个消息 不管是否转发 都会给与确认消息吗 谢谢

那个流程图是比较老的了,这一部分是有一些歧义的,我发给你的是最新的。

Broker 回复 PUBACK,与有没有订阅者,是没有关系的。

也就是说 我想确保消息的送达 需要自己做响应机制是吗

是的,MQTT 5.0 的话可以直接用协议的 请求响应 机制,会方便一些。

好的 谢谢