如何识别publish
到topic
是否成功。有没有办法在发布主题时得到确认。
如果客户端之间publish
期间连接丢失(发布者/订阅者)如何处理它。
我不希望订阅者在收到pay_load后在发布端向特定主题发送确认。
这是我的红宝石代码:
假设我已经创建了客户(@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
答案 0 :(得分:5)
MQTT中没有端到端(发布者到订阅者)传递通知。这是因为作为发布/订阅协议,发布者无法知道给定主题有多少订阅者,可能存在从0到n的任何内容。
规范中内置的QOS级别确保消息从发布者传递到代理(然后从代理传递到订阅者)。如果要确保传递消息,请使用QOS级别1或2。
QOS 1将确保至少发送一次消息(如果存在网络问题,可能会更多)
QOS 2将确保仅发送一次消息。
在大多数MQTT客户端库中,还有deliveryComplete
回调,应该在完成发布的所有QOS握手后调用,如果添加其中一个,则可以合理地确信消息具有从经销商到经纪人。不幸的是,我无法在Ruby客户端