MQTTをmosquittoで試しました
記事の更新日:2026/09/12
1.概要
IoTデバイス向け通信方式としてMQTTが広く利用されています。Queueと聞くと待ち行列で駅に人が到着するモデルが浮かびます。また、汎用機のジョブ管理(JES2等)のジョブキューや出力キュー、オンライントランザクション処理のインプットキュー等の方が私にはわかりやすく感じます。ネットで調べると、MQTTのmosquittoが簡単で一般的とのことなので、試してみました。その内容を記述します。私の評価は以下の通りです。
(1) MQTTはランダムに発生するデータを一列に並べて同期処理に変えることができます
(2) 一列に並ぶので整合性が取れる形でデータベースなどを更新できます
(3) MQTTのmosquittoが簡単で一般的で学習する上で最適です
(4) Dockerを利用して簡単に試験できます
2.詳細
参考資料のdocker-hubの記述に従って実施します。MQTTの環境構築はDockerコンテナを利用することで非常に簡単です。それよりも試験の仕組みを理解して試験するほうが難しい。今回はterminalを3個利用します。1個めはmosquitto本体が稼働している環境です、2個めは受信環境、3個めが送信環境です。
mkdir ~/mosquitto/config
cd ~/mosquitto/config
vi mosquitto.conf
エディットする中身は下記内容です
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
起動
docker run -it -p 1883:1883 -v "$PWD/mosquitto/config:/mosquitto/config" eclipse-mosquitto
下記メッセージが表示されるとOKです。
Status: Downloaded newer image for eclipse-mosquitto:latest
操作方法はdocker-hubに記載はありません。別の参考資料を参照します。
containerIDを確認して、
docker exec -it <containerID> sh
mosquitto_sub -h localhost -t test
これで受信できる状態になりました
containerIDを確認して、
docker exec -it <containerID> sh
mosquitto_pub -h localhost -t test -m "send message"
ここで(2)のterminalにsend messageが表示されると完了です。
・メインフレームのMVS3.8jをLinuxMint 22.3で学習する方法
(1) 1個めのterminalを起動
まず、ディレクトリを作成mkdir ~/mosquitto/config
cd ~/mosquitto/config
vi mosquitto.conf
エディットする中身は下記内容です
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
起動
docker run -it -p 1883:1883 -v "$PWD/mosquitto/config:/mosquitto/config" eclipse-mosquitto
下記メッセージが表示されるとOKです。
Status: Downloaded newer image for eclipse-mosquitto:latest
操作方法はdocker-hubに記載はありません。別の参考資料を参照します。
(2) 2個めのterminalを起動
docker pscontainerIDを確認して、
docker exec -it <containerID> sh
mosquitto_sub -h localhost -t test
これで受信できる状態になりました
(3) 3個めのterminalを起動
docker pscontainerIDを確認して、
docker exec -it <containerID> sh
mosquitto_pub -h localhost -t test -m "send message"
ここで(2)のterminalにsend messageが表示されると完了です。
3.所見
Queueの良いところはランダムに発生するデータをシーケンシャルに変更して順次処理に帰る点です。これでオンライン処理とデータ同期の問題をFIFOで解決することができます。また、他のシステムとの連携などのような非同期環境との連携もQueueを利用して解決できます。MQTTのmosquittoはその基礎部分なので一度学習しておくことは良いことだと思います。
Queueは非同期処理を同期処理に変えることにも利用されます。オンライントランザクション処理が良い事例です。端末から起動されたトランザクション(照会や更新)はQueueに保存されます。Databaseを更新する処理はQueueからシーケンシャルに入力データを取り出して処理をすることで時系列に処理でき、矛盾することがありません。
この方式は時系列を矛盾なく順番に処理することができる上に、システム負荷を計算できるようにしています。Queueから読み込む処理の個数を制御することで、異なるデータベースへの処理を同時並行して処理することや参照処理など大量に発生する更新しない処理に関しては処理個数の増減でレスポンス対策をすることが可能です。
参考
[本ブログ内参照]・メインフレームのMVS3.8jをLinuxMint 22.3で学習する方法
コメント
コメントを投稿