Docker环境下Python+MQTT可发布但无法接收消息问题
Docker环境下Flask-MQTT订阅无SUBACK但发布正常的问题
我运行了两个Docker容器:一个是基于Mosquitto的MQTT服务器,另一个使用flask_mqtt。
Flask容器能够接收CONNACK并向代理发送订阅请求,但始终无法收到SUBACK;不过它可以成功向home/mytopic发布消息(已通过mqtt-explorer验证)。
这一情况十分奇怪,因为该功能在Docker环境外运行完全正常。
docker-compose配置
services: mqtt: container_name: mqtt_container image: eclipse-mosquitto:latest networks: - local_net ports: - "1883:1883" volumes: - ./MqttServer/:/mosquitto/config/:rw flask: container_name: flask_container build: context: Api dockerfile: Dockerfile networks: - local_net ports: - "80:80" networks: local_net: external: false
Flask的Dockerfile配置
FROM python:latest COPY requirements.txt / RUN pip3 install -r /requirements.txt COPY . /app WORKDIR /app # ENTRYPOINT ["gunicorn", "main:app", "-w", "1", "-b", "0.0.0.0:80"] ENTRYPOINT ["python", "main.py"]
main.py代码
from flask import Flask from flask_mqtt import Mqtt from flask_restx import Api, Resource app = Flask(__name__) app.config['MQTT_BROKER_URL'] = "mqtt" app.config['MQTT_BROKER_PORT'] = 1883 app.config['MQTT_KEEPALIVE'] = 60 mqtt = Mqtt(app) api = Api( app=app, title='xxx', description='yyy', version='1.0.0', ) @mqtt.on_connect() def handle_connect(client, userdata, flags, rc): if rc == 0: print("connection established") mqtt.subscribe('home/mytopic') else: print("connection error") @mqtt.on_message() def handle_mqtt_message(client, userdata, message): print("i'm here") data = dict( topic=message.topic, payload=message.payload.decode() ) print(data) @mqtt.on_log() def handle_logging(client, userdata, level, buf): print(buf) @api.route('/test') class Airflow(Resource): def get(self): mqtt.publish('home/mytopic', "hello world") def post(self): pass if __name__ == '__main__': app.run(host="0.0.0.0", port=80, debug=False, use_reloader=False)
内容的提问来源于stack exchange,提问作者Tx Mat
相关产品推荐
相关产品推荐

