Todos os produtos
Search
Central de documentação

:Como implementar mecanismo de nova tentativa de reconexão em clientes

Última atualização: Jun 27, 2026

Para garantir a confiabilidade da interação em cenários de instabilidade de rede ou anomalias no servidor, os clientes do Simple Message Queue (SMQ, formerly MNS) implementam políticas de confiabilidade que abrangem tanto o produtor quanto o consumidor.

Produtor: mecanismo de nova tentativa

  • Tipos de exceção e gatilho de nova tentativa

    • Tipos de exceção: identifique e categorize as exceções de cliente (MNS ClientException, como timeouts de rede ou erros de limitação de taxa) e as exceções de servidor (ServerException). Diferencie os erros que permitem nova tentativa (por exemplo, códigos de erro 5xx ou instabilidade de rede) daqueles que não permitem (por exemplo, recurso inexistente QueueNotExist).

    • Novas tentativas pelo cliente conforme necessário: para reenviar mensagens quando preciso, crie uma lógica de nova tentativa no código de negócio com base nos requisitos da sua aplicação.

  • Política de backoff

    • Recomendamos implementar uma política de backoff exponencial (por exemplo, começando em 1 segundo, com limite máximo de 60 segundos) combinada com uma política de jitter aleatório. Essa abordagem evita um volume excessivo de novas tentativas no nível do cluster.

Consumidor: mecanismo de nova tentativa

  • Nova tentativa automática

    • Em casos de falha no consumo (por exemplo, mensagens não confirmadas explicitamente ou timeout de consumo), o SMQ reentrega automaticamente as mensagens com base no período de timeout de visibilidade das filas quando o cliente busca novas mensagens.

  • Design de idempotência no consumidor

    • Projete a lógica de negócio para ser naturalmente idempotente (por exemplo, deduplicação por meio de uma chave única no banco de dados) ou verifique se a mensagem já foi consumida com base no identificador único da mensagem MessageId combinado ao estado do serviço.

  • Tratamento de exceções

    • Ao encontrar exceções na lógica de consumo de mensagens, não envie uma mensagem de confirmação (ACK). Em vez disso, permita que o SMQ reentregue a mensagem até que ela seja consumida com sucesso; nesse momento, chame a operação DeleteMessage para excluir a mensagem.

Referências

Para exemplos de código em Java, consulte Receber mensagens de uma fila.