19

私は MQTT を初めて使用し、メッセージが発行されたときに決定される QOS レベルの意味について学びました。

  • メッセージが 2 回到着するよりも、まったく到着しないことを希望する場合は0
  • メッセージを少なくとも1回は受信したいが、2 回 (またはそれ以上) 受信してもかまわない場合は 1
  • 2メッセージを 1 回だけ受信する場合。QOS 値が高いほど、転送が遅くなります

加入者側でも「受信する最大 QOS レベル」を設定できることに気付きました。ここから引用:

たとえば、メッセージが QoS 2 でパブリッシュされ、クライアントが QoS 0 でサブスクライブされている場合、メッセージは QoS 0 でそのクライアントに配信されます。

これは、発行元が QOS 2 でメッセージを送信したにもかかわらず、メッセージがクライアント (QOS 0) に届かない可能性があることを意味しますか?

これは、経験の浅い開発者にとって大きな問題になる可能性があります。たとえば、npm mqtt パッケージのサブスクライブ機能のデフォルトの QOSは 0 です! (私の意見では、デフォルトは最大値 2 である必要がありました。つまり、「発行元に QOS を決定させる」)。

4

4 に答える 4

16

おっしゃる通りです。QoS 2 で公開されたメッセージが、QoS 0 を使用しているサブスクライバーに届くという保証はありません。そのサブスクライバーがメッセージを受信することが重要な場合は、QoS 1 または 2 を使用する必要があります。任意のアプリケーションについて決定します。

QoS 0 の定義を「最大 1 回」に書き換えます。つまり、メッセージが受信されるか受信されないか、重複の可能性はありません。

デフォルトの QoS について - ほとんどのクライアントは QoS 0 をデフォルトとして使用していると思います。デフォルトとして QoS 1 または 2 を設定することが、経験の浅い開発者にとって役立つとは思えません。開発者は、なぜ、何をしているのかを理解し、アプリケーションへの影響を考慮する必要があります。

于 2015-11-02T15:24:32.143 に答える
4

パブリッシャーは、どのクライアントがそのメッセージをサブスクライブしているかを直接把握していません。パブリッシャーの QOS レベルによって、ブローカーがパブリケーションを確実に受け取るためのサービスの品質が決まります。ブローカはパブリケーションを受信する、それぞれのサブスクライバーによって選択された QOS で各サブスクライバーにメッセージを再送信する責任を負います。パブリッシャーが QOS 0 または 1 でブローカーにメッセージを送信した場合でも、サブスクライバーは QOS 2 でブローカーからメッセージを受信できます。

この記事は、この概念を理解するのに非常に役立ちました。

于 2020-10-28T19:13:34.560 に答える