Проблема с мостом google iot mqtt

У нас есть приложение на основе Интернета вещей, которое настроено для связи с нашей приборной панелью через мост MQTT от различных поставщиков услуг, таких как Google, AWS и Azure.

Итак, поток такой:

  1. Устройство запускает сеанс TLS с поставщиком услуг.
  2. Подпишитесь на конкретную тему и ждите сообщений от поставщик услуг с таймаутом 5 секунд.
  3. Dashboard периодически публикует сообщения на одну и ту же тему.
  4. Поставщик услуг Интернета вещей транслирует его на все подписанные устройства.

Публикация и подписка на сообщения выполняются с помощью сервисов MQTT QOS 1.

Наблюдение:

AWS и Azure отлично работают с указанным выше потоком, но устройство перестает получать сообщения от моста Google MQTT после 3-5 успешных итераций, хотя наша панель управления публикует сообщения в мост Google IoT MQTT.

Что касается Google, мы определили, что поток управления отличается от Azure и AWS.

Для Google нам нужно подписываться и отказываться от подписки на данную тему каждый раз, прежде чем ждать получения сообщения, а для AWS и Azure нам нужно подписаться один раз во время открытия MQTT-соединения.

Проблема:

Иногда происходит 5-секундный тайм-аут устройства, поскольку он не может получать сообщения для подписанной темы от моста Google MQTT. Добавление нескольких повторных попыток для преодоления проблемы с тайм-аутом не удалось, поскольку проблема все еще сохраняется, поскольку устройство не может получить сообщение от моста Google MQTT через 45-60 секунд работы устройства после включения.

  • Есть ли у моста Google MQTT ограничение на периодическое получение сообщений без постоянной подписки?
  • Как устройство может получать сообщения без тайм-аута (5 секунд) от моста Google MQTT?
  • Есть ли обходной путь для восстановления устройства после того, как истекло время ожидания повторного подключения MQTT?

Я также столкнулся с некоторыми проблемами с pub / sub облачной платформы Google, хотя и отличными от вашей. Вы используете библиотеку pub / sub Google или реализовали свой собственный код, используя некоторую библиотеку mqtt для подписки на темы?

Dalton Cézane 11.04.2018 20:47
1
1
489
2

Ответы 2

Я также использую ядро ​​google iot, код на стороне устройства для клиента mqtt - golang при использовании пакета paho mqtt. этот клиентский пакет поддерживает обработчик OnConnect, который при использовании этого обработчика обеспечивает восстановление, которое, я думаю, вы ищете. С помощью этого обработчика я повторно подписываюсь на тему "config".

Я думаю, что Google не сохраняет подписки, на которые подписаны клиенты, и поэтому клиенту необходимо повторно подписаться после успешного подключения.

Вот код golang, который я использовал (вдохновленный ответом gingi007, спасибо!)

var onConn MQTT.OnConnectHandler
onConn = func(client MQTT.Client) {
    fmt.Println("connected")
    client.Subscribe(topic.Config, 1, handlerFunc)
}
mqttOpts.SetOnConnectHandler(onConn)
client := MQTT.NewClient(mqttOpts)

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

Другие вопросы по теме