MQTT-соединение в Docker-контейнереPython

Программы на Python
Ответить
Anonymous
 MQTT-соединение в Docker-контейнере

Сообщение Anonymous »

У меня есть файл Docker Compose, который создает несколько контейнеров.Один контейнер с брокером mqtt:

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

mqtt:
image: eclipse-mosquitto
hostname: mosquitto
container_name: mqtt
restart: unless-stopped
ports:
- "1883:1883"
- "9001:9001"
volumes:
- ./mosquitto:/etc/mosquitto/
healthcheck:
test: ["CMD", "mosquitto_sub", "-t", "$$SYS/#", "-C", "1", "-i", "healthcheck", "-W", "3"]
interval: 10s
retries: 5
start_period: 30s
timeout: 10s
И один контейнер Python, который использует paho для подключения к брокеру:

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

MQTT_SERVER = "host.docker.internal"
MQTT_PATH = "test_channel"

def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))

def on_message(client, userdata, msg):
print("Message received")

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect(MQTT_SERVER, int(str(os.environ["MQTT_PORT"])), keepalive=60)

client.subscribe(MQTT_PATH)

client.loop_forever()

Затем я отправляю сообщения с другим файлом Python со своего компьютера (не в контейнере докера):

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

import json
import random
import time

import paho.mqtt.publish as publish
import datetime

MQTT_SERVER = "localhost"
MQTT_PATH = "test_channel"

while True:

data = {
"1" :1,
"2" : 2
}

message = {
"source": "source1",
"data": data,
"time": datetime.datetime.now(datetime.timezone.utc).strftime("%Y-%m-%d %H:%M:%S.%f")
}

publish.single(MQTT_PATH, json.dumps(message), hostname=MQTT_SERVER)

time.sleep(0.1)

Сообщения проходят, и я могу их получить, но они перестают работать после времени Keep_alive. Я предполагаю, что слушатель не может связаться с брокером.
Я изменил время Keep_alive и подтвердил, что это проблема.
Кто-нибудь знает, как я могу исправить это?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -container
Ответить

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

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

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

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

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