Comment éviter les notifications push en double : analyse approfondie de la fonctionnalité CID
Dans les systèmes de notifications push, les pushs en double constituent un problème courant, en particulier dans des scénarios de réseaux instables ou de tentatives de renvoi par le système. Cet article examine en détail la fonctionnalité de l'identifiant client (CID), qui vous aide à exploiter ce mécanisme pour prévenir efficacement la livraison de messages en double.
Fonctionnalité CID dans les notifications push immédiates
Fonctionnalités principales
Le CID est un paramètre optionnel utilisé pour identifier une requête push spécifique. Lorsqu'une requête est répétée avec le même CID :
- Le système retourne le
msg_iddu push réussi précédent - Empêche l'envoi répété de messages aux utilisateurs
- Offre des garanties d'idempotence (la même opération produit le même effet, même exécutée plusieurs fois)
Caractéristiques clés
| Fonctionnalité | Description |
|---|---|
| Période de validité | 1 heure |
| Exigences de format | Caractères alphanumériques, underscores, tirets ; longueur ≤ 64 caractères |
| Unicité | Doit être unique sous le même appkey |
| Scénarios pris en charge | Pushs uniques et pushs en lot |
Cas d'utilisation
- Reprises réseau : Relancer les pushs avec le même CID lorsque le réseau est instable
- Garantie d'idempotence : S'assurer que le même message n'est pas envoyé plusieurs fois
- Suivi des requêtes : Suivre le statut de pushs spécifiques via le CID
Exemples de requêtes
Push unique avec CID
curl --insecure -X POST -v https://pushapi-sgp.engagelab.com/v4/push \
-H "Content-Type: application/json" \
-u "AppKey:MasterSecret" \
-d '{
"options": {
"cid": "order-notify-20230701-001",
"time_to_live": 60
}
}'
Push en lot avec CID
curl --insecure -X POST -v https://pushapi-sgp.engagelab.com/v4/push/batch/regid \
-H "Content-Type: application/json" \
-u "AppKey:MasterSecret" \
-d '{
"requests": [
{
"options": {
"cid": "user-12345-notification",
"time_to_live": 60
}
}
]
}'
Gestion des réponses
Premier push réussi
{
"msg_id": "2460001"
}
Push répété avec le même CID
{
"msg_id": "2460001" // Retourne le msg_id du premier push
}
Format CID invalide
{
"error": {
"code": 23003,
"message": "Le format du CID ne respecte pas les exigences"
}
}
Description des codes d'erreur
| Code d'erreur | Description | Résolution | Code HTTP |
|---|---|---|---|
| 21003 | Format CID invalide ou longueur dépassée | Vérifiez la conformité du format CID ; assurez-vous que la longueur ne dépasse pas 64 caractères | 400 |
Bonnes pratiques
- Utilisez le CID pour les activités critiques : Appliquez le CID aux messages tels que les notifications de paiement et les alertes importantes
- Générez des identifiants explicites : Utilisez des formats comme
typeBusiness-userID-timestamp(ex.paiement-12345-202307011030) - Mécanisme de reprise réseau : Relancez avec le même CID en cas d'erreur réseau
- Distinguez les identifiants pour les pushs en lot : Utilisez des CIDs uniques pour chaque requête en lot pour un suivi facilité
- Journalisation du CID côté client : Enregistrez les CIDs côté client pour la déduplication des messages et les requêtes de statut
Fonctionnalité CID dans les tâches planifiées
Fonctionnalités principales
Le CID s'applique également à la création de tâches planifiées, évitant la création en double des mêmes tâches planifiées :
- La réutilisation du même CID retourne le
schedule_idprécédemment créé - Empêche le système de créer des tâches planifiées en double
Caractéristiques clés
| Fonctionnalité | Description |
|---|---|
| Période de validité | 1 heure |
| Exigences de format | Caractères alphanumériques, underscores, tirets ; longueur ≤ 64 caractères |
| Unicité | Doit être unique sous le même appkey |
Exemple de requête
curl --insecure -X POST -v https://pushapi-sgp.engagelab.com/v4/schedules \
-H "Content-Type: application/json" \
-u "AppKey:MasterSecret" \
-d '{
"cid": "daily-reminder-202307",
"trigger": {
"daily": {
"start": "2023-07-01",
"time": "09:00:00"
}
}
}'
Gestion des réponses
Première création réussie
{
"schedule_id": "0123456789"
}
Création répétée avec le même CID
{
"schedule_id": "0123456789" // Retourne le schedule_id de la première création
}
Bonnes pratiques
- Identification des tâches périodiques : Incluez les informations de cycle dans le CID (ex.
rapport-hebdo-2023s27) - Résumé des paramètres de la tâche : Ajoutez un hash des paramètres critiques (ex.
anniversaire-md5(params)) - Coordination dans les systèmes distribués : Utilisez le même CID sur plusieurs instances de service pour éviter les créations en double
- Mécanisme de mise à jour des tâches : Utilisez un nouveau CID lors de la modification des tâches
Flux de traitement EngageLab
graph TD
A[Réception de la requête] --> B{Contient un CID ?}
B -->|Oui| C[Interroger Redis]
B -->|Non| D[Traitement normal]
C --> E{CID existant ?}
E -->|Oui| F[Retourner le msg_id/schedule_id stocké]
E -->|Non| G[Traiter la requête]
G --> H[Enregistrer la correspondance CID → ID]
H --> I[Retourner le nouvel ID]Foire Aux Questions
Q : Pourquoi la période de validité du CID est-elle d'une heure ?
R : Cela suffit à couvrir les scénarios de reprise courants tout en évitant une croissance illimitée du stockage. Les activités critiques peuvent prolonger la période de déduplication via leurs propres journaux.
Q : Peut-on utiliser le même CID avec des appkeys différentes ?
R : Oui. Les CIDs doivent seulement être uniques sous le même appkey.
Q : Le CID garantit-il une unicité globale ?
R : Il doit seulement être unique sous le même appkey ; le système n'exige pas d'unicité globale.
Q : Comment valider le format du CID ?
R : Utilisez l'expression régulière : /^[a-zA-Z0-9_-]{1,64}$/
Résumé
En utilisant correctement le paramètre CID, vous pouvez :
- ✅ Éviter les messages en double dus aux reprises réseau
- ✅ Garantir l'idempotence pour les messages critiques
- ✅ Simplifier le suivi des messages dans les systèmes distribués
- ✅ Améliorer la fiabilité globale du système
Principales recommandations de mise en œuvre :
- Ajoutez des CIDs aux messages critiques
- Adoptez la convention de nommage
business-entité-temps - Implémentez une logique de déduplication basée sur le CID côté client
- Surveillez les codes d'erreur liés au CID
Grâce aux conseils de cet article, vous pouvez exploiter efficacement la fonctionnalité CID pour construire un système de notifications push plus robuste et résoudre complètement le problème des pushs en double.

