max_queued_messagesオプションの動作

ということで、先のmax_queued_messagesオプションを試してみました。

結論から言うと、バッファリングしているのは指定した数の最も古いデータでした。

確認手順:

  • mosquitto.confにmax_queued_messages 30と設定
    これで、30個のデータが保持されるはず。

  • ブローカが動いている計算機から $ sudo /etc/init.d/mosquitto restart で設定を反映

  • QoS1、clear_sessionをfalseでブローカにサブスクライブ要求します。

  • 適当に中断

  • 適当に再開
    今回は寝る前に止めて朝起きて再接続してみました。
    あとでデータを確認できるようreconnect.txtというファイルに保存。データの第一フィールドは送信時のタイムスタンプになっています。

で、送られたデータを確認してみると。。。。

1
2
3
4
5
6
7
8
9
10
11
$ cat reconnect.txt | awk -F , '{ command = "date -d @" $1 ; printf NR" " ; system(command) }'
1 Sat Dec 6 21:33:01 JST 2014
2 Sat Dec 6 21:34:02 JST 2014
3 Sat Dec 6 21:35:01 JST 2014
(...snip..)
27 Sat Dec 6 21:59:01 JST 2014
28 Sat Dec 6 22:00:01 JST 2014
29 Sat Dec 6 22:01:01 JST 2014
30 Sat Dec 6 22:02:02 JST 2014 <指定した数だけ古いデータがあって
31 Sun Dec 7 09:57:01 JST 2014 <そのあと最新の配信データが届く
32 Sun Dec 7 09:58:02 JST 2014

ということで、停止してすぐのデータが指定数だけ保存されている、という結論です。