paho-mqtt を使用して、キューに入れられたメッセージを受信しようとしています。私が使用しているブローカーは emqx 4.2.2 で、これが私のスクリプトです:
from paho.mqtt.client import Client, MQTTv5
def on_connect(mqttc, obj, flags, rc, other):
print(" Session present: " + str(flags['session present']))
print(" Connection result: " + str(rc))
mqttc.subscribe([
('/message/1', 1)
])
def on_message(*args, **kwargs):
print("received a message")
client = Client(
client_id='test-client-id',
protocol=MQTTv5,
)
client.username_pw_set(
username="test-user-2",
password="test"
)
client.on_connect = on_connect
client.on_message = on_message
client.connect(
host='localhost',
port=1883,
keepalive=60,
clean_start=False,
)
client.loop_forever()
次に、ブローカーにメッセージを発行します。
mosquitto_pub -u test-user-2 -P test -t '/message/1' -m 'this is a message' -q 1 -V mqttv5
クライアントがブローカーに接続されている間、メッセージを受信しますが、私が QoS 1 でサブスクライブしていて、メッセージが QoS 1 で発行されていることを考えると、クライアントをブローカーから切断すると、さらに QoS を発行することを期待しています。 1 つのメッセージをそのトピックに送信し、同じ固定 client_id を使用してクライアントをブローカーに再接続すると、クライアントは、クライアントが離れている間にキューに入れられたメッセージを受信します。それは起こらず、mosquitto_sub で -c フラグを指定して同じ機能をシミュレートすると、すべてが期待どおりに機能します。私は何か間違ったことをしていますか?