El apagado controlado es una función integrada de ApsaraMQ for RocketMQ que evita la pérdida de mensajes y los errores del cliente durante las operaciones del lado del servidor. Cuando el servidor experimenta lanzamientos de versiones, reinicios o mantenimiento, ApsaraMQ for RocketMQ activa mecanismos de protección para evitar desconexiones abruptas del cliente y garantizar la continuidad del negocio.
Mecanismos de protección
Suspensión de escritura en el servidor
Antes de que se reinicie un nodo de almacenamiento, el servidor suspende temporalmente las operaciones de escritura hacia ese nodo. El reinicio continúa solo cuando ya no se escriben mensajes nuevos en el nodo. Esto garantiza que todos los mensajes enviados previamente por los clientes se almacenen correctamente.
Drenaje de conexiones mediante GOAWAY
El servidor de ApsaraMQ for RocketMQ utiliza la trama GOAWAY definida en el protocolo HTTP/2 para cerrar conexiones de forma controlada o notificar a los clientes que las conexiones están por cerrarse. Este mecanismo coordina la finalización de conexiones entre el servidor y los clientes, evita que se interrumpan las solicitudes en curso y asegura la estabilidad del sistema.
Efectos
Productores: todas las solicitudes de envío de mensajes se procesan correctamente. No ocurren fallos de envío durante el proceso de apagado controlado.
Consumidores: la mayoría de los mensajes se consumen correctamente. En casos poco frecuentes, un pequeño número de mensajes acumulados en el nodo de almacenamiento que se reinicia podría reenviarse debido a fallos en la confirmación del desplazamiento del consumidor durante la transición.
Requisitos de versión del SDK
Para utilizar el apagado controlado, el SDK de su cliente debe cumplir con a continuación requisitos de versión mínima:
|
Lenguaje |
Versión mínima |
Referencia |
|
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 |
Notas de uso
No se requiere configuración del lado del cliente: el apagado controlado es una función del servidor. Solo actualice el SDK de su cliente a una versión compatible.
Diseñe los consumidores para idempotencia: las confirmaciones de desplazamiento del consumidor pueden fallar durante el breve periodo de transición, lo cual puede provocar que se reenvíe un pequeño número de mensajes. Asegúrese de que la lógica de su consumidor pueda procesar de forma segura el mismo mensaje más de una vez.
Supervise proactivamente las versiones del SDK: al agregar nuevos servicios o actualizar dependencias, compruebe que el SDK del cliente de ApsaraMQ for RocketMQ aún cumpla con los requisitos de versión mínima para el apagado controlado.