0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MQTTプロトコルについて

Last updated at Posted at 2025-02-14

とある案件にて、HTTPでなくMQTTプロトコルを使ったデータのやり取りを実装することになりました。これを機に知識共有と備忘録を兼ねてMQTTについて紹介します。

MQTTとは?

MQTT(Message Queuing Telemetry Transport) は、1999年にIBM社とEurotech社により考案された軽量なメッセージプロトコルです。
MQTTは、限られたリソースを持つデバイスや、低帯域、高遅延、または信頼性の低いネットワーク環境向けに設計されています。そのため、機械同士が通信を介して情報をやり取りするM2M(Machine-to-Machine)や、家電や自動車など多種多様な「モノ」がインターネットにつながり、お互いに情報をやり取りするIoT(Internet of Things)を実現するのに適したプロトコルと言われています。

パブリッシュ/サブスクライブモデル

MQTTは、 パブリッシュ/サブスクライブ型 のメッセージングモデルを採用しています。
MQTT.png

  • パブリッシャー : メッセージの送信側
  • サブスクライバー : メッセージの受信側
  • ブローカー : MQTTサーバー。パブリッシャーからのメッセージを受信し、適切なサブスクライバーに配信する

パブリッシャーは、メッセージを特定のトピックにパブリッシュ(送信)します。サブスクライバーは、興味のあるトピックをサブスクライブ(受信)することで、そのトピックにパブリッシュされたメッセージを受け取れます。
このモデルの利点は、パブリッシャーとサブスクライバーが互いに相手を意識する必要がないことです。ブローカーがメッセージの配信を仲介するため、システムの複雑さを軽減し、スケーラビリティを向上させることができます。

MQTTの特徴

  • 軽量
    ヘッダーサイズが最小2バイトと小さく、ペイロードも軽量であるため、低帯域幅のネットワークや低消費電力のデバイスに適しています。
  • シンプル
    プロトコルがシンプルで実装が容易であるため、様々なデバイスに組み込むことができます。
  • 非同期
    パブリッシャーとサブスクライバーが互いの状態を意識する必要がないため、柔軟なシステム構築が可能になります。
  • 双方向通信
    パブリッシャーとサブスクライバーは立場を入れ替えることができ、双方向の通信を実現できます。
  • メッセージの到達保証
    QoS(Quality of Service) によって、メッセージの到達保証レベルを設定できます。
  • Will(遺言)機能
    予期せぬ切断時に、ブローカーからサブスクライバーに特定のメッセージを送信できます。

QoS(Quality of Service)

QoS(Quality of Service) は、メッセージの到達保証レベルの定義です。以下の3つのレベルが定義されています。

  • QoS0 (At most once):
    メッセージは最大1回配信されます。配信の保証はありません。
    速度が最も速く、信頼性が低い
    例:センサーデータの定期的な送信
  • QoS1 (At least once):
    メッセージは最低1回配信されます。重複して配信される可能性があります。
    信頼性が高い
    例:重要なアラートメッセージの送信
  • QoS2 (Exactly once):
    メッセージは正確に1回だけ配信されます。重複や損失はありません。
    最も信頼性が高いが、速度が最も遅い
    例:金融取引データの送信
    パブリッシャーはどのQoSでメッセージを送信するか選択することができます。

HTTPとの比較

HTTPは、クライアントがサーバーにリクエストを送信し、サーバーがそのリクエストに応答する、という同期型の通信プロトコルです。一方MQTTは、非同期型の通信プロトコルであり、パブリッシャーとサブスクライバーは互いに相手を意識することなくメッセージを送受信できます。

MQTTのメリット

  • 軽量
    HTTPと比較してはるかに軽量であるため、IoTデバイスのようなリソースの限られた環境に適しています。
  • 非同期通信
    MQTTの非同期通信機能により、IoTデバイスのバッテリー寿命を延ばし、ネットワーク帯域幅を節約するのに役立ちます。
  • 多対多通信
    1対多、多対多の通信をサポートしているため、IoTシステムの構築に適しています。
  • 不安定なネットワークへの対応
    再接続機能やQoSによって、不安定なネットワーク環境でも信頼性の高い通信を実現できます。

MQTTの利用例

MQTTは、様々な分野で利用されています。

  • 油田パイプライン監視
    油田パイプラインに取り付けられたセンサーから衛星へのデータ送信
  • Facebook Messenger
    メッセージの送受信
  • 自動車のIoT化
    車両の状態監視、遠隔操作
  • 病院のペースメーカー監視
    患者の心臓の状態を遠隔監視
  • 屋外の自動水やりシステム
    センサーデータに基づいた自動水やり
  • 人工衛星
    データ通信

まとめ

今回はMQTTの概要について紹介しました。MQTTは、IoTに最適な軽量で効率的なメッセージングプロトコルです。今後ひはWindowsやLinux環境にブローカーを構築する方法なども機会があれば紹介していきたいと思います。

参考サイト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?