我正在尝试一个简单的网络应用程序,我在python中使用paho-mqtt (mosquitto)
中的发布订阅模型进行多个节点通信。
我想要建模的用例是一个节点有一个需要执行的特定工作,它应该确认收到执行该工作的请求,如果请求节点在一定时间内没有收到确认,它重新提交请求。
我开始使用为on_message
mqtt_client
事件指定的方法执行作业
我的on_message
方法
# mqtt_client is the client object
# Job represents the job I need to start
# mqtt_topic is the topic the requester listens
def on_message(client, userdata, msg):
request = msg.payload
if "PERFORM" in request:
mqtt_client.publish(mqtt_topic, "ACK", 2, False)
job = Job()
job.dispatch()
这项工作肯定需要任意长的时间才能完成。
我面临的问题是,mqtt_client
在启动作业之前不会立即发送“ACK”消息,并且等待发送直到作业完成。我尝试发布“ACK”并在不同的线程上调度作业,但结果却相同。
现在因为请求者认为请求每次都超时,我进入请求循环和作业调度。 在开始这项工作之前,我想知道是否有任何方法可以让“ACK”发布完成。