こんにちは。開発エンジニアのd_shr(id:d_shr)です。
これまではNode.jsやPostgreSQLについて書いていましたが
今回はIoTを支える通信プロトコルMQTTについてまとめます。
はじめに
MQTTは、Publish/Subscribe モデルのメッセージングにより、非同期に1対多の通信ができるプロトコルです。
シンプルかつ軽量に設計されているため、機械同士が通信を行いやり取りするM2M (Machine-to-Machine) や
家電や自動車など多種多様な「モノ」が通信を行いやり取りするIoT (Internet of Things) を実現するのに適した
プロトコルと言われています。
軽量で省電力
HTTPと比較すると、軽量で省電力なプロトコルです。
MQTTのヘッダサイズは2バイト〜とHTTPに比べるとかなり軽量になっており
その軽量さからバッテリーが限られているモバイル通信に適しています。
メッセージングとTopic
メッセージング
MQTTはPub/Subモデルでメッセージングを行います。
Pub/Subモデルではメッセージの送信者をPublisher、メッセージの受信者をSubscriber、メッセージの仲介をするのがBrokerです。
Publisher はメッセージをBrokerへ送るとき、送ったメッセージがどの Subscriber に届くのかなど気にする必要はありません。
Subscriberはメッセージがどの Publisher から送られて来たのか知ることなく欲しいメッセージをBrokerから受け取ります。
Topic
MQTTでは、Topicと呼ばれるキーを用いてメッセージングを行います。
トピックは「/」で区切られた階層構造になっています。
例:japan/osaka
PublisherはTopicを指定してメッセージを送信し、Subscriberは受信したいトピックをfilterとして指定することで、欲しいメッセージだけを手に入れることができます。
MQTTの機能
QoS
MQTTではメッセージごとに到達保証に関するQoS(サービスの品質)を指定します。
QoS0
メッセージは最高 1 回 配信される
メッセージが送信先に届くかは保証されないQoS1
メッセージは最低 1 回 配信される
メッセージが送信先に届くことが保証されるが重複して届く可能性がある.QoS2
メッセージは正確に 1 回 配信される
メッセージが過不足なく 1 回のみ到着することが保証される.
Retain
Topicごとに最後にPublishされたメッセージをMQTTサーバが保持しておく機能。
MQTTはPub/Subモデルなので、PublishしたときにSubscribeしていたクライアントにしかメッセージは送信されません。
具体的には、10分ごとに更新される情報を得るために新しくSubscribeしても,最長10分間はなにも情報が得られないことになります。
しかし、Retain機能を使うとその時点での最新の情報が得ることができます。
Will
Publisherが切断されてサーバとの通信ができなくなったときに
指定されたTopicとメッセージをSubscriberに送信する機能。
予期せぬ切断などが発生したときに、SubscriberはPublisherが切断されていることを判断できます。
まとめ
IoTを支えるプロトコルMQTTについて簡単にまとめてみました。
世の中にIoTが広がってきているので、それに関連した技術は追っていきたいと思います。
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.comラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com