O desligamento graceful é um recurso nativo do ApsaraMQ for RocketMQ que evita perda de mensagens e erros no cliente durante operações no servidor. Durante atualizações de versão, reinicializações ou manutenções, o ApsaraMQ for RocketMQ ativa mecanismos de proteção para impedir desconexões abruptas dos clientes e garantir a continuidade dos negócios.
Mecanismos de proteção
Suspensão de escrita no servidor
Antes de reinicializar um nó de armazenamento, o servidor suspende temporariamente as operações de escrita nesse nó. A reinicialização prossegue apenas após cessarem as gravações de novas mensagens. Isso garante o armazenamento bem-sucedido de todas as mensagens já enviadas pelos clientes.
Drenagem de conexões via GOAWAY
O servidor do ApsaraMQ for RocketMQ usa o frame GOAWAY, definido no protocolo HTTP/2, para fechar conexões de forma controlada ou notificar os clientes sobre um fechamento iminente. Esse mecanismo coordena o encerramento das conexões entre servidor e clientes, evita a interrupção de requisições em andamento e assegura a estabilidade do sistema.
Efeitos
Produtores — O sistema processa com sucesso todas as requisições de envio de mensagens. Nenhuma falha de envio ocorre durante o processo de desligamento graceful.
Consumidores — A maioria das mensagens é consumida normalmente. Em casos raros, um pequeno volume de mensagens acumuladas no nó de armazenamento em reinicialização pode ser reentregue se a confirmação do offset do consumidor falhar durante a transição.
Requisitos de versão do SDK
Para usar o desligamento graceful, o SDK do cliente deve atender aos seguintes requisitos mínimos de versão:
|
Linguagem |
Versão mínima |
Referência |
|
Java (protocolo gRPC) |
5.0.7 |
SDK for Java |
|
Java (protocolo Remoting) |
5.3.1 |
SDK for Java |
|
Go |
5.1.0-rc.1 |
SDK for Go |
|
Python |
5.0.4 |
SDK for Python |
|
C++ |
5.0.2 |
SDK for C++ |
|
C# |
5.1.0 |
SDK for C# |
|
Node.js |
1.0.1 |
SDK for Node.js |
Observações de uso
Nenhuma configuração necessária no cliente — O desligamento graceful é um recurso do servidor. Basta atualize o SDK do cliente para uma versão compatível.
Projete consumidores idempotentes — A confirmação do offset do consumidor pode falhar durante o breve período de transição, o que pode causar a reentrega de algumas mensagens. Garanta que a lógica do seu consumidor processe a mesma mensagem mais de uma vez com segurança.
Monitore proativamente as versões do SDK — Ao adicionar novos serviços ou atualizar dependências, verifique se o SDK do cliente ApsaraMQ for RocketMQ ainda atende aos requisitos mínimos de versão para o desligamento graceful.