L'arrêt en douceur est une fonctionnalité native d'ApsaraMQ for RocketMQ qui prévient la perte de messages et les erreurs côté client lors des opérations côté serveur. Lors des déploiements de versions, des redémarrages ou des maintenances du serveur, ApsaraMQ for RocketMQ active des mécanismes de protection pour éviter les déconnexions brutales des clients et garantir la continuité des activités.
Mécanismes de protection
Suspension des écritures côté serveur
Avant le redémarrage d'un nœud de stockage, le serveur suspend temporairement les écritures sur ce nœud. Le redémarrage ne débute qu'une fois l'écriture de nouveaux messages terminée. Cette approche garantit le stockage réussi de tous les messages déjà envoyés par les clients.
Drainage des connexions via GOAWAY
Le serveur ApsaraMQ for RocketMQ utilise la trame GOAWAY définie dans le protocole HTTP/2 pour fermer les connexions de manière contrôlée ou notifier aux clients leur fermeture imminente. Ce mécanisme coordonne la fin des connexions entre le serveur et les clients, empêche l'interruption des requêtes en cours et assure la stabilité du système.
Effets
Producteurs — Toutes les demandes d'envoi de messages aboutissent. Aucun échec d'envoi ne survient pendant le processus d'arrêt en douceur.
Consommateurs — La plupart des messages sont consommés avec succès. Dans de rares cas, un petit nombre de messages mis en file d'attente sur le nœud de stockage en cours de redémarrage peut être redistribué, car la validation des offsets des consommateurs échoue pendant la transition.
Exigences de version du SDK
Pour utiliser l'arrêt en douceur, votre SDK client doit respecter les exigences minimales de version suivantes :
| Langage | Version minimale | Référence |
| Java (protocole gRPC) | 5.0.7 | SDK for Java |
| Java (protocole 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 |
Notes d'utilisation
Aucune configuration côté client requise — L'arrêt en douceur est une fonctionnalité côté serveur. Mettez simplement à jour votre SDK client vers une version prise en charge.
Concevez des consommateurs idempotents — La validation des offsets des consommateurs peut échouer pendant la brève période de transition, ce qui peut entraîner la redistribution d'un petit nombre de messages. Assurez-vous que votre logique de consommation peut traiter plusieurs fois le même message en toute sécurité.
Surveillez proactivement les versions du SDK — Lorsque vous ajoutez de nouveaux services ou mettez à jour des dépendances, vérifiez que votre SDK client ApsaraMQ for RocketMQ respecte toujours les exigences minimales de version pour l'arrêt en douceur.