Ruby
mqtt
mosquitto
subscribe
publish

MQTTでPublishしてしまったメッセージを取り消したい/なかったことにしたい/キャンセルしたい

Publishしてしまった!しかもqos=1 or 2で!

さらに、retain=true、MQTT初心者だった私は当時パニックになりました
試しにMQTTを触っていた私は、思わぬ動作を引き起こし、ついついやってしまったということです
 #正直コレ自体は正しい使い方をすれば優れた機能で、間違っていません
  間違っていたのは私の理解と使い方です

publishってなぁに?
subscribeってなぁに?
qosってなぁに?
qos levelってなぁに?(1 or 2 or 3)
retainってなぁに?
仕組みが分かっていないプロパティは使うものじゃないよね、というお話

あ、間違えてPublishしちゃった。。。

公式Doc

#publish('dummy/topic', payload = '{ "message": "hello!"}', retain = true, qos = 1)

これでメッセージがMQTTブローカーに保存され、subscribeする側は、
永遠に同じメッセージが取得出来ます
でも、使い方によってはこれじゃ困る!qos=0でいいし、読み捨てたい!

そう思ったらこれ!

誤って保存されてしまったメッセージを取り消す

#publish('dummy/topic', payload = '', retain = true, qos = 1)

同じTopicに、同じqos levelで、payloadを空でPublishすることで
MQTTブローカーに保存されてしまったメッセージを削除することができます
 #知らないと意外とハマる

感想

わからないモノ(APIやフレームワークのメソッドやOSSライブラリも)は、理解するまで使うべからず
使って、やっちゃったら、自分の責任ということを忘れるべからず