Suportado por
Java script
SGC Default Protocol e MQTT implementam QoS (Quality of Service) para entrega de mensagens. Há 3 tipos diferentes:
Level 0: "No máximo uma vez", onde as mensagens são entregues de acordo com o melhor esforço (best efforts) da rede TCP/IP subjacente. Perda ou duplicação de mensagens pode ocorrer. Este nível pode ser utilizado, por exemplo, com dados de sensores ambientais onde não importa se uma leitura individual é perdida já que a próxima será publicada logo depois.
Level 1: "At least once", onde a chegada das mensagens é garantida, mas duplicatas podem ocorrer.
Level 2: "Exatamente uma vez", em que se garante que as mensagens chegam exatamente uma vez. Este nível pode ser usado, por exemplo, com sistemas de cobrança onde mensagens duplicadas ou perdidas poderiam levar à aplicação de cobranças incorretas.
A mensagem é entregue de acordo com os melhores esforços da rede TCP/IP subjacente. Uma resposta não é esperada e nenhuma semântica de reenvio é definida no protocolo. A mensagem chega ao servidor uma vez ou não chega.
A tabela abaixo mostra o fluxo do protocolo no nível QoS 0.
| Client | Message and direction | Servidor |
|---|---|---|
| QoS = 0 | PUBLISH ----------> |
Action: Publicar uma mensagem para assinantes |
O recebimento de uma mensagem pelo servidor é confirmado por uma mensagem ACKNOWLEDGEMENT. Se houver uma falha identificada do link de comunicação ou do dispositivo emissor, ou se a mensagem de confirmação não for recebida após um período de tempo especificado, o remetente reenvia a mensagem. A mensagem chega ao servidor pelo menos uma vez.
Uma mensagem com QoS nível 1 tem um Message ID na mensagem.
A tabela abaixo mostra o fluxo do protocolo QoS de nível 1.
| Client | Message and direction | Servidor |
|---|---|---|
| QoS
= 1 Message ID = x Action: Armazenar mensagem |
PUBLISH ----------> |
Actions:
|
| Action: Descartar mensagem | ACKNOWLEDGEMENT<---------- |
Se o cliente não receber uma mensagem ACKNOWLEDGMENT (seja dentro de um período de tempo definido na aplicação, ou se uma falha for detectada e a sessão de comunicação for reiniciada), o cliente pode reenviar a mensagem PUBLISH.
Fluxos de protocolo adicionais acima do QoS nível 1 garantem que mensagens duplicadas não sejam entregues à aplicação receptora. Este é o nível mais alto de entrega, para uso quando mensagens duplicadas não são aceitáveis. Há um aumento no tráfego de rede, mas isso geralmente é aceitável devido à importância do conteúdo da mensagem.
Uma mensagem com QoS nível 2 tem um Message ID na mensagem.
A tabela abaixo mostra o fluxo do protocolo QoS level 2. Há duas semânticas disponíveis para como um fluxo PUBLISH deve ser tratado pelo destinatário.
| Client | Message and direction | Servidor |
|---|---|---|
| QoS
= 2 Message ID = x Action: Armazenar mensagem |
PUBLISH ----------> |
Action: Armazenar mensagem |
PUBREC <---------- |
Message ID = x | |
| Message ID = x | PUBREL ----------> |
Actions:
|
| Action: Descartar mensagem | ACKNOWLEDGEMENT <---------- |
Message ID = x |
Se uma falha for detectada, ou após um período de tempo definido, o fluxo do protocolo é repetido a partir da última mensagem de protocolo não confirmada. Os fluxos de protocolo adicionais garantem que a mensagem seja entregue aos assinantes exatamente uma vez.