Gadz.org souhaite privilégier l'Architecture Orientée Service (FR) afin de fluidifier les évolutions des applications ainsi que les évolutions technologiques.
Règles de design
- Les applications communiquent entre elles via RabbitMQ - Gestion de RabbitMQ
- Les applications peuvent requeter les référentiels directement via une API HTTP. Dans ce cas, la dépendance au service concernée doit être explicitement signalée
Structure des messages
Les messages doivent vérifier le schema JSON suivant : gorg_soa_message.schema.json
Exemple de message :
{ "event_uuid":"88d818a1-c77c-44e6-ad0c-8aa893468e94", "event_name":"request.gapps.account.create", "event_creation_time":"2016-05-29T15:03:50+00:00", "event_sender_id":"gram", "data":{ "id":"12453" }, "errors_count":1, "errors":[ { "error_type":"softerror", "error_uuid":"e157e1a0-2663-11e6-b67b-9e71128cae77", "error_sender":"gappsd", "error_message":"Google API Unavailable", "timestamp":"2016-05-29T15:03:50Z", "error_debug":{ "id":"12453" } } ] }
Gestion des erreurs
Dans chaque applications, des erreurs peuvent empecher le message d'être traiter. Chaque message contient l'historique des erreurs qui lui sont associées.
Si un service consommateur souhaite ajouter une erreur il doit obligatoirement renvoyer ce message vers l'exchange RabbitMQ principal. Si le traitement du message ne necessitait pas que celui-ci soit envoyé à un autre service consomateur, il peut être envoyé directement au service d'audit via la routing key spéciale : "agoram.log"
Types d'erreurs
Les messages sont séparés en 5 classes d'erreur
Les termes "Softerror" et "Harderror" sont tirés de la précédente version du manager Google Apps écrit en python par les X. https://github.com/vzanotti/gappsd
Debug
Non implémenté
Info
Non implémenté
Warning
Non implementé
Softerror
Une erreur temporaire empêche le traitement du message. Il s'agit d'une erreur due à l'environnement extérieur, indépendante du service consommateur. Le message est envoyé dans une queue de stockage pour être retraiter plus tard automatiquement.
Exemples :
- Problème réseau empéchant de se connecter à une API
- Limite de vitesse d'utilisation d'une API atteinte
Harderror
Une erreur empêche le traitement du message. Il s'agit d'une erreur du au message lui même. Le message ne peux et ne pourra jamais être traiter.
Exemple :
- Json mal formaté
- Données non valide (ex: pas d'email pour la création d'un compte Google Apps)
Debugger les messages
Visualiser les messages transmis
Nous avons créer un outil maison pour visualiser les messages sur https://gorg-soa-supervision.herokuapp.com/. Le code source est ici : https://github.com/gadzorg/gorg_soa_supervision
Il peut également être utilisé en ligne de commande pour trouver plus efficacement des messages précis.
Envoyer un message manuellement
https://gorg-soa-supervision.herokuapp.com/ peut également être utilisé pour envoyer des messages manuellement