Acknowledgement on publish - MQTT

a 夏天 提交于 2019-12-23 01:13:13

问题


How to identify whether the publish to a topic was success or not. Is there any way to get acknowledgement on publishing to a topic.

If there is any connection loss during publish between the clients(Publisher/Subscriber) how to handle it.

I don't want the subscriber to send an ack to specific topic in the publishing end after receiving the pay_load.

Here is my ruby code:

Assume, I have created clients(@client) and configured on both sides.

Publish

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

Subscribe

@client.subscribe('test/#')

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

回答1:


There is no end to end (publisher to subscriber) delivery notification in MQTT. This is because as a pub/sub protocol there is no way for a publisher to know how many subscribers there are to a given topic, there could be anything from 0 to n.

The QOS levels built into the spec ensure that messages are delivered from the publisher to the broker (and then from the broker to the subscribers). If you want to ensure a message is delivered then use either QOS level 1 or 2.

QOS 1 will ensure a message is delivered at least once (possibly more if there are network problems)

QOS 2 will ensure a message is delivered only once.

In most of MQTT client libraries there is also the deliveryComplete callback which should be called once all the QOS handshake for a publish has been completed, if you add one of these you can be reasonably confident that the message has made it from the publisher as far as the broker. Unfortunately I can't see this implemented in the Ruby client



来源:https://stackoverflow.com/questions/37875962/acknowledgement-on-publish-mqtt

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!