= QoS 1 Nachlieferung Subscribe mit expliziter Client ID und "clean session" auf "false". $ docker run --rm -it --net host eclipse-mosquitto \ mosquitto_sub --debug --topic demo/qos1 --qos 1 --disable-clean-session --id demo In separatem Terminal wird nun das Netzwerk so konfiguriert, dass es hohe Latenzen (3 Sekunden) gibt, dies macht es leichter, zum richtigen Zeitpunkt die Verbindung zu unterbrechen: (falls Docker genutzt wird) $ docker run --rm -it --net host --cap-add NET_ADMIN alpine:3 # apk -U add iptables iproute2 iproute2-ss (ohne Docker, Debian/Ubuntu) $ sudo apt install -y iptables iproute2 $ sudo bash # iptables -t mangle -A POSTROUTING -o lo -p tcp --sport 1883 -j MARK --set-mark 1 # iptables -t mangle -A PREROUTING -i lo -p tcp --dport 1883 -j MARK --set-mark 1 # tc qdisc add dev lo root handle 1: prio # tc filter add dev lo parent 1:0 protocol ip handle 1 fw flowid 1:1 # tc qdisc add dev lo parent 1:1 handle 10: netem delay 3s Ermittlung des Ports des Subscribers: # ss -t sport = :1883 Im ersten Terminal werden nun mehrere Nachrichten versandt: $ docker run --rm -it --net host eclipse-mosquitto \ mosquitto_pub -t demo/qos1 -q 1 -m "This is delivered. #1" $ docker run --rm -it --net host eclipse-mosquitto \ mosquitto_pub -t demo/qos1 -q 1 -m " #### This could be delivered later. #2" Nach ca. 3 Sekunden werden die TCP Verbindungen des Subscribers im zweiten Terminal unterbrochen) # ss -t -K sport = :60804 Optional: Im ersten Terminal wird mittels mehrfachem CTRL-C der Subscriber beendet. Anschließend erfolgt neuer Start. $ docker run --rm -it --net host eclipse-mosquitto \ mosquitto_sub --debug -t demo/qos1 --qos 1 --disable-clean-session --id demo Testen Sie auch, was passiert, wenn beim Neustart ein völlig anderes Topic angegeben wird - wird die nicht erhaltene Nachricht trotzdem ausgeliefert? $ docker run --rm -it --net host eclipse-mosquitto \ mosquitto_sub --debug -t demo/othertopic --qos 1 --disable-clean-session --id demo Anschließendes Aufräumen: # iptables -t mangle -F # tc qdisc del dev lo root = Quellen Wireshark: https://www.wireshark.org/