发布确认 - MQTT

Acknowledgement on publish - MQTT

如何判断 publishtopic 是否成功。有什么方法可以在发布主题时获得确认。

如果在publish期间客户端之间有任何连接丢失(Publisher/Subscriber)如何处理。

我不希望订阅者在收到 pay_load 后向发布端的特定主题发送确认。

这是我的 ruby 代码:

假设,我已经创建了客户端(@client)并在两侧进行了配置。

发布

def publish_it
  @client.publish('test/hai', 'message')
  # Ack the publish
end

订阅

@client.subscribe('test/#')

@client.get do |topic,message|
  puts "#{topic}: #{message}"
end

MQTT 中没有端到端(发布者到订阅者)传递通知。这是因为作为 pub/sub 协议,发布者无法知道给定主题有多少订阅者,可能是从 0 到 n 之间的任何值。

规范中内置的 QOS 级别确保消息从发布者传递到代理(然后从代理传递到订阅者)。如果您想确保消息已送达,请使用 QOS 级别 1 或 2。

QOS 1 将确保消息至少传递一次(如果存在网络问题,可能会传递更多次)

QOS 2 将确保消息只被传送一次。

在大多数 MQTT 客户端库中,还有 deliveryComplete 回调,一旦发布的所有 QOS 握手都已完成,应该调用该回调,如果您添加其中之一,您可以有理由相信消息从发布者到经纪人。不幸的是,我在 Ruby 客户端

中看不到这个实现