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_id du 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

  1. Reprises réseau : Relancer les pushs avec le même CID lorsque le réseau est instable
  2. Garantie d'idempotence : S'assurer que le même message n'est pas envoyé plusieurs fois
  3. 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 } }'
              
              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
    }
  }'

            
Afficher ce bloc de code dans la fenêtre flottante

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 } } ] }'
              
              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
        }
      }
    ]
  }'

            
Afficher ce bloc de code dans la fenêtre flottante

Gestion des réponses

Premier push réussi

{ "msg_id": "2460001" }
              
              {
  "msg_id": "2460001"
}

            
Afficher ce bloc de code dans la fenêtre flottante

Push répété avec le même CID

{ "msg_id": "2460001" // Retourne le msg_id du premier push }
              
              {
  "msg_id": "2460001" // Retourne le msg_id du premier push
}

            
Afficher ce bloc de code dans la fenêtre flottante

Format CID invalide

{ "error": { "code": 23003, "message": "Le format du CID ne respecte pas les exigences" } }
              
              {
  "error": {
    "code": 23003,
    "message": "Le format du CID ne respecte pas les exigences"
  }
}

            
Afficher ce bloc de code dans la fenêtre flottante

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

  1. Utilisez le CID pour les activités critiques : Appliquez le CID aux messages tels que les notifications de paiement et les alertes importantes
  2. Générez des identifiants explicites : Utilisez des formats comme typeBusiness-userID-timestamp (ex. paiement-12345-202307011030)
  3. Mécanisme de reprise réseau : Relancez avec le même CID en cas d'erreur réseau
  4. Distinguez les identifiants pour les pushs en lot : Utilisez des CIDs uniques pour chaque requête en lot pour un suivi facilité
  5. 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_id pré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" } } }'
              
              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"
      }
    }
  }'

            
Afficher ce bloc de code dans la fenêtre flottante

Gestion des réponses

Première création réussie

{ "schedule_id": "0123456789" }
              
              {
  "schedule_id": "0123456789"
}

            
Afficher ce bloc de code dans la fenêtre flottante

Création répétée avec le même CID

{ "schedule_id": "0123456789" // Retourne le schedule_id de la première création }
              
              {
  "schedule_id": "0123456789" // Retourne le schedule_id de la première création
}

            
Afficher ce bloc de code dans la fenêtre flottante

Bonnes pratiques

  1. Identification des tâches périodiques : Incluez les informations de cycle dans le CID (ex. rapport-hebdo-2023s27)
  2. Résumé des paramètres de la tâche : Ajoutez un hash des paramètres critiques (ex. anniversaire-md5(params))
  3. Coordination dans les systèmes distribués : Utilisez le même CID sur plusieurs instances de service pour éviter les créations en double
  4. 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 :

  1. ✅ Éviter les messages en double dus aux reprises réseau
  2. ✅ Garantir l'idempotence pour les messages critiques
  3. ✅ Simplifier le suivi des messages dans les systèmes distribués
  4. ✅ 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.

icon
Contactez-nous