Mosquitto (現在は Paho) python MQTT クライアントを使用して、HiveMQ ブローカーに接続しています。コードは非常に基本的なもので、こちらのドキュメントから引用されています - https://pypi.python.org/pypi/paho-mqtt
#SUBSCRIBER
import paho.mqtt.client as mqtt
# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, rc):
client.subscribe("GB/node0/", 2)
# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
print "Topic: ", msg.topic+'\nMessage: '+str(msg.payload)
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("192.168.15.4", 1883, 60)
# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
client.loop_forever()
client.subscribe() でわかるように、QoS は 2 です。これは、公式ドキュメントのコードに対する唯一の変更です。
パブリッシング クライアントのコードは次のとおりです。
#PUBLISHER
import paho.mqtt.client as mqtt
mqttc = mqtt.Client("python_pub")
mqttc.connect("192.168.15.4", 1883, 60)
mqttc.publish("GB/node0/", "Hello, World baby!",2)
ここでも、QoS は 2 です。
この QoS の変更により、加入者が受信するメッセージは 20 だけになります。さらに調べてみると、この問題はおそらく が原因であることがわかりましmax_inflight_messages_set()
た。これは、ネットワーク フローの途中で一度に送信できる QoS > 0 のメッセージの最大数を設定するオプション機能です。デフォルトは 20 です。
ただし、他の値に変更しても機能しません。また、クライアントは、これらのメッセージが受信されたときにまだ処理中であると考えるのはなぜですか? 問題を解決するにはどうすればよいですか? これらのメッセージが「処理中」ではなく、配信済みであることをクライアントが確実に理解するにはどうすればよいですか?