MQTT Publish/SubscribeにおけるQoSとは
 Author: 水卜

QoSとは

Quality of Serviceの略。

MQTT Pub/Subのメッセージが送信されたことをどこまで保証するかでレベルが分かれる。

QoS Level 0

メッセージを一回だけ送信する。

メリット

軽い。

デメリット

もしSubscriberにメッセージが届かなくても、Publisherにそれを知るすべはない。

QoS Level 1

メッセージを最低1回送る。

Subscriberはメッセージを受け取った通知「PUBACK」をPublisherに送信する。

PublisherはPUBACKが届くまで何度でもPublishし続ける。

メリット

Publisher側でSubscriberの受領を検知することができる。

デメリット

何らかの原因でPUBACKが遅れた場合もPublisherは複数通送ってしまう。

Subscriberは手元に複数のメッセージが届いていても、本当に複数送られてきたのか、PUBACKがなかったために複数送られてきたのか知るすべがない。

QoS Level2

メッセージを1回正確に届ける。

  1. PublisherがメッセージをSubscriberに送信
  2. Subscriberがメッセージを受領しPUBRECをPublisherに返却
  3. PublisherがPUBRECを受領しPUBRELをSubscriberに送信
  4. SubscriberがPUBRELを受領し、PUBCOMPをPublisherに返却

メリット

メッセージの後に受信確認の通信を入れるので、送れなかったために複数メッセージを送信したのか、本当に複数メッセージ送信したのか見分けがつく。Level1でのデメリットを解決している。

デメリット

重い。