发布确认 - MQTT
Acknowledgement on publish - MQTT
如何判断 publish
到 topic
是否成功。有什么方法可以在发布主题时获得确认。
如果在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 客户端
中看不到这个实现
如何判断 publish
到 topic
是否成功。有什么方法可以在发布主题时获得确认。
如果在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 客户端