Подтверждение о публикации - MQTT
Как определить, является ли 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
1 ответ
В MQTT нет уведомления о сквозной доставке (от издателя к подписчику). Это связано с тем, что в качестве протокола pub / sub у издателя нет возможности узнать, сколько подписчиков на данную тему, может быть что угодно, от 0 до n.
Уровни QOS, встроенные в спецификацию, обеспечивают доставку сообщений от издателя посреднику (а затем от посредника подписчикам). Если вы хотите, чтобы сообщение было доставлено, используйте QOS уровня 1 или 2.
QOS 1 обеспечит доставку сообщения хотя бы один раз (возможно, больше, если возникнут проблемы с сетью)
QOS 2 обеспечит доставку сообщения только один раз.
В большинстве клиентских библиотек MQTT также есть deliveryComplete
обратный вызов, который должен быть вызван после того, как все рукопожатие QOS для публикации было завершено, если вы добавите один из них, вы можете быть достаточно уверены в том, что сообщение пришло от издателя до брокера. К сожалению, я не вижу этого реализованным в клиенте Ruby