클라이언트에 도달 할 때까지 MQTT QoS 레벨을 유지하는 방법이 있습니까?


9

발신자는 MQTT를 통해 QoS ( Quality of Service ) 레벨 을 설정할 수 있으며 , 이는 메시지 수신 여부 및 중복 허용 여부에 대한 특정 보증을 제공합니다. HiveMQ 의이 기사 는 다운 그레이드 문제를 강조합니다. QoS 수준이 낮은 클라이언트는 발신자가 요청한 것을 보장하는 메시지를받지 않습니다.

이미 언급했듯이, 게시 클라이언트와 구독 클라이언트 간의 QoS 흐름은 QoS가 다를 수있을뿐만 아니라 서로 다른 두 가지입니다. 즉, QoS 수준은 메시지를 게시하는 클라이언트 A와 게시 된 메시지를받는 클라이언트 B와 다를 수 있습니다. 발신자와 브로커간에 QoS는 발신자가 정의합니다. 브로커가 모든 가입자에게 메시지를 보낼 때 클라이언트 B의 가입 QoS가 사용됩니다.

MQTT는이 다운 그레이드가 허용되지 않으며 원래 발신자의 요청한 QoS를 사용하여 메시지 전달 해야 함 을 표시하는 방법을 제공합니까 ? 메시지 전송 하기 전에 발신자와 수신자 모두 원하는 QoS 설정을 갖도록하는 유일한 옵션 입니까?

답변:


8

MQTT로 작업 할 때 기억해야 할 한 가지는 "가입자 및 발행자 모두 MQTT 클라이언트로 간주된다"는 것입니다.

게시하는 동안 설정된 QoS는 전적으로 다른 클라이언트가 아닌 broker (B)와 관련이 있습니다. 따라서 가입자 (S)가 게시자 (P)가 게시하는 모든 것을 받고 있는지 확인하려면 QoS 1을 사용해야합니다.

사례를 살펴 보겠습니다. P-QoS 0으로 전송합니다. 즉, 모든 메시지가 B에 최대 한 번 (1 회 또는 0 회) 있음을 의미합니다. 이 경우 S가 QoS 0으로 B를 구독하면 브로커 (B)가 최종적으로 S에 도달 할 메시지를 수신한다고 보장 할 수 없습니다. QoS 1-S는 확실히 QoS 2를받습니다. 브로커는 여러 메시지를받지 않습니다.

다른 QoS와 동일한 작업을 수행하는 경우 QoS 1이 모든 것을 초월하므로 가입자를위한 QoS 1이 모든 수준에서 잘 작동한다는 것을 알게 될 것입니다.


MQTT는 이에 대한 표시를 제공하지 않지만 구독하는 동안 QoS 1을 사용하여 발신자의 QoS를 달성 할 수 있습니다.


4

QoS 1 또는 2 레벨은 공개 된 메시지가 브로커에 도착했는지 만 확인합니다. 가입자 QoS 1 또는 2는 브로커에게 메시지가 수신되었음을 보장합니다.

1 또는 2로 게시한다고해서 누구나 듣고 있다는 의미는 아닙니다.

사용 사례는 무엇입니까?


3
답변에 질문하지 마십시오. 분명하지 않은 내용이 있으면 먼저 의견을 남겨주십시오.
Bence Kaulics

센서가 메시지 브로커로 데이터를 전송 한 다음 QoS 보증이 유지 되는 것이 중요한 컴퓨터 나 다른 프로세서로 전달되는 상황이 궁금합니다 .
Aurora0001
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.