如何解决如何在计划的后台线程中传输MQTT消息?
我已成功运行基于MQTT的应用程序。
随着时间的流逝,我迁移了SW组件版本和我将MQTT消息传输移至APScheduler后台线程中。客户端实例通过依赖项注入传递到作业调度。
现在我正在使用mosquitto eclipse mqtt代理docker镜像eclipse-mosquitto:1.6.10
和Python paho客户端paho-mqtt = "1.5.0"
。
现在,如果我尝试与客户端连接到代理,则连接断开,并且收到错误Connection Refused: unacceptable protocol version.
,该错误抛出in the v1.5 client source code。
客户端连接如下:
def on_disconnect(client,userdata,rc): # pylint: disable=invalid-name,unused-argument
print(mqtt.connack_string(rc))
client = mqtt.Client(
client_id="mvp-end-device-agent",clean_session=False,protocol=mqtt.MQTTv311,)
client.on_disconnect = on_disconnect
user = "mvp-end-device-agent"
pwd = "some-string"
client.username_pw_set(user,pwd)
client.connect(host,port) # implicit timeout of 60 seconds
def on_disconnect(client,unused-argument
mosquitto/config/acl
应该仍然匹配:
user mvp-end-device-agent
topic write ...
以及mosquitto/config/passwd
配置:
mvp-end-device-agent:<HASHEDPWD>
和mosquitto/config/mosquitto.conf
配置:
password_file /mosquitto/config/passwd
acl_file /mosquitto/config/acls
最可能相关的日志条目(mqtt-explorer-31e2d891
用于调试,mvp-end-device-agent
是实际的客户端):
1603891749: New connection from 172.18.0.6 on port 1883.
1603891749: New client connected from 172.18.0.6 as mvp-end-device-agent (p2,c0,k1,u'mvp-end-device-agent').
1603891749: No will message specified.
1603891749: Sending CONNACK to mvp-end-device-agent (1,0)
1603891750: Received PINGREQ from mqtt-explorer-31e2d891
1603891750: Sending PINGRESP to mqtt-explorer-31e2d891
1603891751: Received PINGREQ from mvp-end-device-agent
1603891751: Sending PINGRESP to mvp-end-device-agent
1603891752: Received PINGREQ from mvp-end-device-agent
1603891752: Sending PINGRESP to mvp-end-device-agent
1603891753: Received PINGREQ from mvp-end-device-agent
1603891753: Sending PINGRESP to mvp-end-device-agent
1603891754: Received PINGREQ from mvp-end-device-agent
1603891754: Sending PINGRESP to mvp-end-device-agent
1603891755: Received PINGREQ from mvp-end-device-agent
1603891755: Sending PINGRESP to mvp-end-device-agent
1603891755: Received DISCONNECT from mvp-end-device-agent
1603891755: Client mvp-end-device-agent disconnected.
我很难弄清这个问题的根本原因。引发此错误的潜在原因是什么?
编辑:我通过依赖注入将mqtt客户端传递给APScheduler作业,以计划发送MQTT消息,作为作业执行的一部分。每个作业都在线程中执行。事实证明,Connection Refused: unacceptable protocol version.
的根本原因是在执行线程后,客户端被隐式断开,这完全合乎情理。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。