Клиент Python paho mqtt часто отключается с кодом ошибки 7 «Соединение потеряно» после отправки состояния и событий в GCPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Клиент Python paho mqtt часто отключается с кодом ошибки 7 «Соединение потеряно» после отправки состояния и событий в GC

Сообщение Anonymous »

РЕДАКТИРОВАТЬ: В первоначальной версии этого вопроса я использовал версию клиента Python paho-mqtt paho-mqtt 1.5.1. Сообщение об ошибке, которое я получил в этой версии, было on_disconnect 1: Недостаточно памяти. код ошибки 1. Было рекомендовано установить более новую версию (1.6) клиента paho-mqtt и перезапустить код. Я сделал это и по-прежнему сталкиваюсь с тем же самопроизвольным отключением, однако в более новой версии сообщения об ошибках более информативны. В версии 1.6 я получаю код ошибки отключения 7, что означает, что «Соединение потеряно».
Я моделирую устройство Интернета вещей. В рамках этого моделирования я создал класс Messenger, экземпляр которого при создании взаимодействует с виртуальным устройством в ядре Интернета вещей Google Cloud по протоколу MQTT. Клиент, который я использую, часто отключается, что приводит к потере сообщений. Я надеюсь найти способ предотвратить случайное отключение клиента.
Для этого взаимодействия используется клиент, встроенный в класс Messenger, — это клиент Python paho mqtt.
Идентификатор клиента получается из project_id, Cloud_region, Registry_id и Device_ID с использованием следующего кода

Код: Выделить всё

client_id = "projects/{}/locations/{}/registries/{}/devices/{}".format(project_id, cloud_region, registry_id, device_id)
Клиент взаимодействует с ядром Интернета вещей тремя различными способами:
  • Он публикует данные для событий. тема

Код: Выделить всё

sub_topic = "events"
mqtt_topic = "/devices/{}/{}".format(self.device_id, sub_topic)
client.publish(mqtt_topic, payload, qos=1)
  • Он подписывается на тему конфигурации виртуального устройства.

Код: Выделить всё

mqtt_config_topic = "/devices/{}/config".format(self.device_id)
sub_status = client.subscribe(mqtt_config_topic, qos=1)
  • Он отправляет информацию о состоянии в тему состояния устройства с частотой не чаще одного раза в 12 секунд. (Google Cloud рекомендует не чаще одного раза в 10 секунд, поэтому я добавил еще несколько секунд для маневра).

Код: Выделить всё

sub_topic = "state"
mqtt_topic = "/devices/{}/{}".format(self.device_id, sub_topic)
payload = json.dumps(new_state)
client.publish(mqtt_topic, payload, qos=0)
Изначально я заметил, что не все данные, отправленные для публикации в тему событий, были отправлены. Изучив файл журнала, я определил, что проблема вызвана частыми отключениями клиента. Код ошибки, указанный для отключения клиента, равен 1, что технически является ошибкой «недостаточно памяти», но также возникает, когда GCP отключает клиента. Я думаю, что проблема связана с тем, что GCP отключает клиента, но я не совсем уверен.
Вот отрывок из файла журнала:

Код: Выделить всё

DEBUG Controller4.testA [04/Nov/2021:12:54:57.862] new client created
DEBUG Controller4.testA [04/Nov/2021:12:54:57.865] Publishing state to /devices//state
DEBUG Controller4.testA [04/Nov/2021:12:54:57.867] Sending PUBLISH (d0, q0, r0, m2), 'b'/devices//state'', ... (197 bytes)
DEBUG Controller4.testA [04/Nov/2021:12:54:57.870] Not publishing state: Previous state update 0:00:00.004303 seconds ago
DEBUG Controller4.testA [04/Nov/2021:12:54:57.870] on_publish client:  userdata: None mid: 2
DEBUG Controller4.testA [04/Nov/2021:12:54:57.871] Sending PUBACK (Mid: 1)
DEBUG Controller4.testA [04/Nov/2021:12:54:57.947] Received CONNACK (0, 0)
DEBUG Controller4.testA [04/Nov/2021:12:54:57.951] on_connect Connection Accepted.
DEBUG Controller4.testA [04/Nov/2021:12:54:57.976] Received SUBACK
DEBUG Controller4.testA [04/Nov/2021:12:54:57.976] Subscribed: (1,)
DEBUG Controller4.testA [04/Nov/2021:12:54:57.978] Received PUBLISH (d0, q1, r0, m1), '/devices//config', ...  (20 bytes)
INFO Controller4.testA [04/Nov/2021:12:54:57.979] Received new state message '{"osmo": 6, "pH": 4}' on topic '/devices//config' with Qos 1
DEBUG Controller4.testA [04/Nov/2021:12:54:57.980] Not publishing state: Previous state update 0:00:00.114637 seconds ago
DEBUG Controller4.testA [04/Nov/2021:12:54:57.981] Sending PUBACK (Mid: 1)
DEBUG Controller4.testA [04/Nov/2021:12:55:01.958] on_disconnect 7: The connection was lost.  error code 7None
Сейчас я работаю над виртуальным частным облаком, но не уверен, что это имеет значение.
Почему клиент продолжает отключаться? Как мне устранить эту проблему?

Подробнее здесь: https://stackoverflow.com/questions/698 ... e-connecti
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»