Сохранение данных MQTT Broker Bridge

У нас есть брокер Mosquito в местоположении A, а Rabbit MQ — в облаке. Мы подключили обоих брокеров. Данные из темы, настроенной в Mosquito, публикуются в AMQ. Тема в Rabbit MQ.

В случае потери подключения данные, доступные у брокера Mosquito, будут переданы после восстановления подключения.

О чем следует помнить при разработке таких решений?


person Siva Karthikeyan    schedule 13.08.2015    source источник


Ответы (1)


Это зависит от того, как вы настроили мосты.

Как правило, клиенты MQTT бывают двух типов: надежные/постоянные и ненадежные/непостоянные. Это контролируется с помощью флага clean session при подключении.

Надежные/постоянные клиенты

Когда устойчивый клиент подключается (для чистого сеанса установлено значение 0), брокер будет хранить информацию об этом клиенте после его отключения. Это означает, что подписки для этого клиента и, возможно, сообщения готовы к доставке при повторном подключении (с использованием того же идентификатора клиента!)

По умолчанию и в соответствии со спецификацией MQTT сообщения помещаются в очередь для отключенного постоянного клиента только в том случае, если и подписка, и сообщение используют QoS больше 0. Mosquitto предлагает возможность ставить в очередь все сообщения, но это не распространяется на spec, поэтому вы не можете полагаться на него для других брокеров.

Есть и другие предостережения: для автономного клиента будет поставлено в очередь только ограниченное количество сообщений. Это можно настроить на mosquitto с помощью опции max_queued_messages.

Недолговечные/непостоянные клиенты

Когда подключается неустойчивый клиент (для чистого сеанса установлено значение 1), сервер не сохраняет никакой информации об этом клиенте после его отключения.

Если клиент подключается как постоянный, а затем повторно подключается как временный, то вся сохраненная информация будет удалена, как только подключится неустойчивая версия.

Мосты

Тот же принцип применим к мостам, поэтому вам необходимо настроить мосты так, чтобы они были надежными (чистый сеанс 0), и использовать QoS>0 для ваших сообщений. Вам также необходимо убедиться, что максимальное количество сообщений в очереди соответствует вашим потребностям.

person ralight    schedule 13.08.2015