パブリッシュとサブスクライブとは何ですか
パブリッシュ・サブスクライブとは、送る側と読む側が、ブローカーを通してメッセージをやり取りする方式です。送る側は、読む側が誰かを知りません。
このレッスンでは、トピックフィルタで読みたいメッセージだけを選び、条件に合うものを仕分けます。
このレッスンのゴール
メモ
パブリッシュとサブスクライブの仕組みを説明し、トピックフィルタで選ぶことができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| パブリッシュ | トピックを付けて、ブローカーへ送ること | |
| サブスクライブ | 読みたいトピックを、ブローカーに伝えること | |
| トピックフィルタ | 読むトピックを選ぶ、パターンの書き方 | home/+/temperature |
| ワイルドカード | フィルタの中で、複数のトピックに合う記号 | + |
| 保存メッセージ | ブローカーが最後の1件を覚えておく設定 |
学生が入力するセルは、このプレビューでは空白です。
送る側と読む側は互いを知らない
センサーは、トピックを付けて、ブローカーに送ります。これがパブリッシュです。読みたい側は、トピックをブローカーに伝えておきます。これがサブスクライブです。
ブローカーは、トピックが合う読み手に、メッセージを渡します。読み手を増やしても、センサーは変えなくて済みます。
トピックフィルタで読むものを選ぶ
+ は、1つの階層だけに合います。home/+/temperature は、どの部屋の気温にも合います。
# は、そこから下のすべての階層に合います。home/# は、home の下のすべてです。# は、フィルタの最後にだけ置きます。
部屋ごとの気温を4件読む
docker exec broker mosquitto_sub -t 'home/+/temperature' -v -C 4 -W 10ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
合うトピックだけが出る
4行が出ます。どの行も、home/kitchen/temperature か home/livingroom/temperature で始まり、値は整数です。
湿度とドアは、フィルタに合わないので、1行も出ません。並ぶ順番と値は、押した時刻で変わります。
フィルタが合うかどうかの表
| フィルタ | home/kitchen/temperature | home/door/state |
|---|---|---|
| home/+/temperature | 合う | 合わない |
| home/door/+ | 合わない | 合う |
| home/# | 合う | 合う |
| home/kitchen | 合わない | 合わない |
学生が入力するセルは、このプレビューでは空白です。
保存メッセージは遅れて読む人にも届く
普通のメッセージは、読んでいる人にだけ届きます。あとから読み始めた人は、次のメッセージまで待ちます。
保存メッセージは、ブローカーが最後の1件を覚えます。読み始めた人は、すぐにそれを受け取れます。次のメッセージが来ると、置きかわります。
自分のメッセージを保存つきで出す
docker exec broker mosquitto_pub -t home/memo/shelf -r -m readyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
保存したメッセージを読む
docker exec broker mosquitto_sub -t home/memo/shelf -v -C 1 -W 3ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
自分のメッセージは毎回同じ
最初の Run は、何も表示しません。2つ目の Run は、いつも home/memo/shelf ready を出します。自分が出した最後の1件だからです。
-r を付けないと、だれも読んでいない間に送ったメッセージは消えます。
よくある間違い
注意
「読み手が、センサーに値を聞きに行く」と考える人が多くいます。聞きには行きません。センサーは好きなときに送り、ブローカーが、そのときの読み手に渡します。