サポートされているもの
Java script
SGC デフォルトプロトコル と MQTT はメッセージ配信のQoS(サービス品質)を実装しています。3種類があります。
レベル 0: 「最大1回」。メッセージは基盤となるTCP/IPネットワークのベストエフォートに従って配信されます。メッセージの損失や重複が発生する可能性があります。このレベルは、次の読み取りがすぐに公開されるため、個々の読み取りが失われても問題ない周囲センサーデータなどに使用できます。
レベル 1: 「少なくとも 1 回」。メッセージは確実に届きますが、重複する場合があります。
レベル 2: 「正確に 1 回」。メッセージは正確に 1 回届くことが保証されます。このレベルは、例えば重複または欠落したメッセージが誤った請求につながる可能性がある課金システムで使用できます。
メッセージは基盤となる TCP/IP ネットワークのベストエフォートに従って配信されます。レスポンスは期待されず、プロトコルで再試行セマンティクスは定義されていません。メッセージはサーバーに一度だけ届くか、全く届かないかのどちらかです。
以下の表は QoS レベル 0 のプロトコルフローを示しています。
| クライアント | メッセージと方向 | サーバー |
|---|---|---|
| QoS = 0 | PUBLISH ----------> |
Action: サブスクライバーにメッセージを公開する |
サーバーによるメッセージの受信は ACKNOWLEDGEMENT メッセージによって確認されます。通信リンクまたは送信デバイスの障害が識別された場合、または指定された時間内に確認メッセージが受信されなかった場合、送信側はメッセージを再送します。メッセージはサーバーに少なくとも1回届きます。
QoSレベル1のメッセージには、 メッセージにMessage IDがあります。
下の表は QoS レベル 1 のプロトコルフローを示しています。
| クライアント | メッセージと方向 | サーバー |
|---|---|---|
| QoS
= 1 Message ID = x Action: メッセージを 保存する |
PUBLISH ----------> |
Actions:
|
| アクション: メッセージを破棄する | ACKNOWLEDGEMENT<---------- |
クライアントが ACKNOWLEDGMENT メッセージを受信しない場合(アプリケーションで定義された時間内に、または障害が検出されて通信セッションが再起動された場合)、クライアントは PUBLISH メッセージを再送信できます。
QoSレベル1を超える追加のプロトコルフロー により、重複メッセージが受信側アプリケーションに配信されないことが保証されます。 これは最高レベルの配信であり、重複メッセージが 受け入れられない場合に使用します。ネットワークトラフィックは増加しますが、 メッセージ内容の重要性のため、通常は許容されます。
QoS レベル 2 のメッセージには、メッセージ内にメッセージ ID があります。
以下の表は、QoSレベル2のプロトコル フローを示しています。受信者がPUBLISHフローをどのように処理すべきかについて、 2つのセマンティクスが利用可能です。
| クライアント | メッセージと方向 | サーバー |
|---|---|---|
| QoS
= 2 メッセージ ID = x Action: メッセージを 保存する |
PUBLISH ----------> |
アクション: メッセージを保存します |
PUBREC <---------- |
メッセージ ID = x | |
| メッセージ ID = x | PUBREL ----------> |
アクション:
|
| アクション: メッセージを破棄する | 確認応答(ACKNOWLEDGEMENT) <---------- |
メッセージ ID = x |
障害が検出された場合、または定義された期間後に、最後の未確認プロトコルメッセージからプロトコルフローが再試行されます。追加のプロトコルフローにより、メッセージがサブスクライバーに正確に1回配信されることが保証されます。