{"id":1034,"date":"2024-07-04T16:50:00","date_gmt":"2024-07-04T14:50:00","guid":{"rendered":"https:\/\/old-web.terracloud.fr\/?p=1034"},"modified":"2024-09-02T17:16:26","modified_gmt":"2024-09-02T15:16:26","slug":"architecture-orientee-evenement-reconcilier-notifications-et-evenements-complets","status":"publish","type":"post","link":"https:\/\/old-web.terracloud.fr\/en\/blog\/2024\/07\/04\/architecture-orientee-evenement-reconcilier-notifications-et-evenements-complets\/","title":{"rendered":"Event-Driven Architecture: reconcile Notification and Event-Carried State Transfer patterns"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"1034\" class=\"elementor elementor-1034\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-65245288 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"65245288\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4eddb0e4\" data-id=\"4eddb0e4\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-3095d74 elementor-widget elementor-widget-text-editor\" data-id=\"3095d74\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/dev.to\/t\/eventdriven\"><\/a><br><\/p>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-628707c5 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"628707c5\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-398647d4\" data-id=\"398647d4\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b0bb274 elementor-widget elementor-widget-shortcode\" data-id=\"b0bb274\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><span><span><a href=\"https:\/\/old-web.terracloud.fr\/\">Accueil<\/a><\/span><\/span><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4fc512c1 e-transform elementor-widget elementor-widget-heading\" data-id=\"4fc512c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;_transform_translateX_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateX_effect_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateX_effect_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateY_effect&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateY_effect_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;_transform_translateY_effect_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Architecture orient\u00e9e \u00e9v\u00e9nement : r\u00e9concilier Notifications et Ev\u00e9nements \"Complets\"\n<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7d8dafaa elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"7d8dafaa\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Les architectures orient\u00e9es \u00e9v\u00e9nement offrent de nombreux b\u00e9n\u00e9fices : le d\u00e9couplage entre les composants applicatifs permet une meilleure r\u00e9silience \u00e0 la panne, un flux de traitement adapt\u00e9 aux ressources disponibles, un faible temps d'attente pour l'utilisateur (pourquoi traiter de fa\u00e7on synchrone ce qu'il peut l'\u00eatre apr\u00e8s lui avoir r\u00e9pondu ?).<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-ac1dca6 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"ac1dca6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6fe1a2c0\" data-id=\"6fe1a2c0\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-dc4f19a elementor-widget elementor-widget-image\" data-id=\"dc4f19a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST.png\" class=\"attachment-large size-large wp-image-1041\" alt=\"\" srcset=\"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST.png 800w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST-300x169.png 300w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST-768x432.png 768w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST-18x10.png 18w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cf9fbff elementor-widget elementor-widget-text-editor\" data-id=\"cf9fbff\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Cependant, leur conception n&rsquo;est pas ais\u00e9e et peut entra\u00eener de nombreux d\u00e9bats : faut-il des \u00e9v\u00e9nements tr\u00e8s l\u00e9gers, \u00e0 charge pour le consommateur de demander un \u00e9ventuel compl\u00e9ment d&rsquo;information ? faut-il des \u00e9v\u00e9nements complets ? ..<\/p>\n<p>Dans ce billet, j&rsquo;expose les diff\u00e9rents types d&rsquo;\u00e9v\u00e9nements et propose une mani\u00e8re de r\u00e9concilier simplement les diff\u00e9rentes approches en s&rsquo;appuyant sur AWS EventBridge (un repo Github avec un exemple pleinement fonctionnel vous attend en fin de billet !).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7350223 elementor-widget elementor-widget-heading\" data-id=\"7350223\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Les diff\u00e9rents types d'\u00e9v\u00e9nements\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a61bd60 elementor-widget elementor-widget-text-editor\" data-id=\"a61bd60\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Un premier pattern est d&rsquo;utiliser l&rsquo;\u00e9v\u00e9nement \u00ab\u00a0Notification\u00a0\u00bb, qui contient juste un identifiant. En voici un exemple :<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ee8d8f2 elementor-widget elementor-widget-html\" data-id=\"ee8d8f2\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre>\n{ \"orderId\": \"1234567\" }\n<\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a9eaf1e elementor-widget elementor-widget-text-editor\" data-id=\"a9eaf1e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Cet \u00e9v\u00e9nement minimaliste a pour avantage de ne n\u00e9cessiter aucune connaissance de la mod\u00e9lisation du domaine m\u00e9tier : il y a peu de risque de violer le contrat d&rsquo;interface notamment en cas d&rsquo;\u00e9volution. Si un consommateur veut en savoir plus, il peut aller chercher la donn\u00e9e \u00e0 partir de l&rsquo;identifiant communiqu\u00e9 (et si le syst\u00e8me source pr\u00e9sente une API GraphQL, il pourra aller chercher uniquement la donn\u00e9e qui est n\u00e9cessaire pour lui).<\/p>\n<p>Une seconde approche se nomme \u00ab\u00a0Event-carried State Transfer\u00a0\u00bb (par analogie avec le \u00ab\u00a0REpresentational State Transfer\u00a0\u00bb qui caract\u00e9rise les API REST), c&rsquo;est \u00e0 dire que l&rsquo;\u00e9v\u00e9nement porte l&rsquo;\u00e9tat courant. En voici un exemple :<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0a6d265 elementor-widget elementor-widget-html\" data-id=\"0a6d265\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre>\n{\n   \"id\": \"1234567\", \n   \"status\": \"PAYMENT_ACCEPTED\",\n   \"customer\": \"Bob\",\n   \"content\": [ ... ]  \n}\n<\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7840688 elementor-widget elementor-widget-text-editor\" data-id=\"7840688\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Ce type d&rsquo;\u00e9v\u00e9nement a l&rsquo;avantage de porter toute l&rsquo;information disponible et ainsi d&rsquo;\u00e9pargner une requ\u00eate au consommateur, mais aussi d&rsquo;am\u00e9liorer les options de filtrage dont on disposera au niveau du bus d&rsquo;\u00e9v\u00e9nement : on pourra par exemple choisir de ne consommer que les \u00e9v\u00e9nements repr\u00e9sentant une commande au statut <code>PAYMENT_ACCEPTED<\/code> (par exemple pour envoyer un mail de confirmation de commande).<\/p>\n<p>Une troisi\u00e8me voie consiste \u00e0 faire un \u00ab\u00a0Delta\u00a0\u00bb, i.e. transmettre \u00e9galement l&rsquo;\u00e9tat pr\u00e9c\u00e9dent en compl\u00e9ment de l&rsquo;\u00e9tat courant.<\/p>\n<p>Voici un r\u00e9sum\u00e9 des avantages et limites de chaque approche :<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4a14521 elementor-widget elementor-widget-image\" data-id=\"4a14521\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"381\" src=\"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST-FR.png\" class=\"attachment-large size-large wp-image-1040\" alt=\"\" srcset=\"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST-FR.png 870w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST-FR-300x143.png 300w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST-FR-768x365.png 768w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST-FR-18x9.png 18w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-af4e790 elementor-widget elementor-widget-heading\" data-id=\"af4e790\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">R\u00e9concilier l'approche Notification et l'approche Event-carried State Transfer<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2b56af9 elementor-widget elementor-widget-text-editor\" data-id=\"2b56af9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>D\u00e8s lors, on peut vouloir tirer parti des b\u00e9n\u00e9fices de chaque approche<\/p>\n<ul>\n<li>sans pour autant complexifier inutilement l&rsquo;architecture des applications qui publient les \u00e9v\u00e9nements comme de celles qui les consomment.<\/li>\n<li>sans parfois avoir la main sur le code source des applications.<\/li>\n<\/ul>\n<p>C&rsquo;est l\u00e0 qu&rsquo;une approche serverless m\u00ealant bus d&rsquo;\u00e9v\u00e9nement EventBridge et Lambda a tout son sens. Dans cette approche, on va mettre en place<\/p>\n<ul>\n<li>sur le bus d&rsquo;\u00e9v\u00e9nement des r\u00e8gles qui capturent les \u00e9v\u00e9nements de type \u00ab\u00a0<em>Notification<\/em>\u00ab\u00a0<\/li>\n<li>et des micro-services d&rsquo;enrichissement qui vont r\u00e9cup\u00e9rer la donn\u00e9e du domaine m\u00e9tier correspondant et republier l&rsquo;\u00e9v\u00e9nement enrichi.<\/li>\n<\/ul>\n<p>Je commencerai par un exemple simple, avant de montrer comment on peut \u00e9tendre ce pattern. En bas de cet article, vous trouverez un lien vers les deux impl\u00e9mentations qui suivent.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5c9e2b0 elementor-widget elementor-widget-heading\" data-id=\"5c9e2b0\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">La version simple : un seul enrichissement\n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bfe9593 elementor-widget elementor-widget-text-editor\" data-id=\"bfe9593\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Dans cet exemple, une application de gestion de paiement publie un \u00e9v\u00e9nement de type <code>PAYMENT<\/code> portant uniquement l&rsquo;id de l&rsquo;\u00e9v\u00e9nement (un \u00e9v\u00e9nement de notification, donc).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-20c7f36 elementor-widget elementor-widget-image\" data-id=\"20c7f36\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"623\" src=\"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/EventBridge-NotificationToECST-Simple-1024x798.png\" class=\"attachment-large size-large wp-image-1036\" alt=\"\" srcset=\"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/EventBridge-NotificationToECST-Simple-1024x798.png 1024w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/EventBridge-NotificationToECST-Simple-300x234.png 300w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/EventBridge-NotificationToECST-Simple-768x599.png 768w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/EventBridge-NotificationToECST-Simple-1536x1197.png 1536w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/EventBridge-NotificationToECST-Simple-15x12.png 15w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/EventBridge-NotificationToECST-Simple.png 1994w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bfc126b elementor-widget elementor-widget-text-editor\" data-id=\"bfc126b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>C\u00f4t\u00e9 EventBridge, une r\u00e8gle va explicitement viser ces \u00e9v\u00e9nements en v\u00e9rifiant qu&rsquo;aucune donn\u00e9e suppl\u00e9mentaire n&rsquo;est associ\u00e9e<\/p>\n<div class=\"highlight js-code-highlight\">\u00a0<\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fdc435a elementor-widget elementor-widget-html\" data-id=\"fdc435a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre>\n{\n  \"detail-type\": [\"PAYMENT\"],\n  \"detail.payment_data.id\": [{ \"exists\": false }]\n}\n<\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-baf2b33 elementor-widget elementor-widget-text-editor\" data-id=\"baf2b33\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Si cette r\u00e8gle capture un \u00e9v\u00e9nement, elle va l&rsquo;envoyer vers une Lambda qui va publier le m\u00eame \u00e9v\u00e9nement enrichi.<\/p>\n<p>On va donc trouver successivement dans le bus d&rsquo;\u00e9v\u00e9nement deux \u00e9v\u00e9nements (ayant le m\u00eame id m\u00e9tier) :<\/p>\n<ul>\n<li>la notification<\/li>\n<\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8ded6a6 elementor-widget elementor-widget-html\" data-id=\"8ded6a6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre>\n{\n    \"version\": \"0\",\n    \"id\": \"a23a7513-b67a-d455-f90c-1f9ddbd14820\",\n    \"detail-type\": \"PAYMENT\",\n    \"source\": \"PaymentSystem\",\n    \"account\": \"112233445566\",\n    \"time\": \"2024-07-04T09:06:47Z\",\n    \"region\": \"eu-west-1\",\n    \"resources\": [],\n    \"detail\": {\n        \"id\": \"2237082\"\n    }\n}    \n<\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d85f395 elementor-widget elementor-widget-text-editor\" data-id=\"d85f395\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul>\n<li>et l&rsquo;\u00e9v\u00e9nement complet (ECST):<\/li>\n<\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4a7f16b elementor-widget elementor-widget-html\" data-id=\"4a7f16b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre>\n{\n    \"version\": \"0\",\n    \"id\": \"51bbf35e-97d8-8f80-1cc2-debac66460e6\",\n    \"detail-type\": \"PAYMENT\",\n    \"source\": \"PaymentSystem\",\n    \"account\": \"112233445566\",\n    \"time\": \"2024-07-04T09:06:49Z\",\n    \"region\": \"eu-west-1\",\n    \"resources\": [],\n    \"detail\": {\n        \"id\": \"2237082\",\n        \"payment_data\": {\n            \"id\": \"2237082\",\n            \"type\": \"Credit\",\n            \"description\": \"Credit Card - HSBC\",\n            \"status\": \"Confirmed\",\n            \"state\": \"Paid\",\n            \"value\": 1700,\n            \"currency\": \"EUR\",\n            \"date\": \"2018-12-15\"\n        }\n    }\n}\n<\/pre>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-291cde5 elementor-widget elementor-widget-text-editor\" data-id=\"291cde5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>(la structure d&rsquo;\u00e9v\u00e9nement est un peu plus complexe que dans la partie th\u00e9orique : on retrouve ici la structure typique d&rsquo;un \u00e9v\u00e9nement EventBridge qui encapsule le contenu m\u00e9tier.)<\/p>\n<p>Cet \u00e9v\u00e9nement \u00ab\u00a0pleinement qualifi\u00e9\u00a0\u00bb est ensuite envoy\u00e9<\/p>\n<p>Le bus d&rsquo;\u00e9v\u00e9nement EventBridge fournit notamment :<\/p>\n<ul>\n<li>Le d\u00e9couplage entre Producteurs et Consommateurs avec un middleware scalable et hautement disponible<\/li>\n<li>Une logique avanc\u00e9e de filtrage\/capture d&rsquo;\u00e9v\u00e9nements<\/li>\n<li>La possibilit\u00e9 de logger les \u00e9v\u00e9nements et de les archiver pour re-jeu<\/li>\n<li>La gestion du retry pour les invocations synchrones faites par le bus d&rsquo;\u00e9v\u00e9nement.<\/li>\n<li>La transformation de l&rsquo;\u00e9v\u00e9nement pour l&rsquo;adapter au format attendu par le consommateur, sans avoir \u00e0 d\u00e9ployer cette transformation dans une fonction Lambda.<\/li>\n<\/ul>\n<p>L&rsquo;ensemble de ces fonctionnalit\u00e9s sont d\u00e9montr\u00e9es dans le code disponible en fin d&rsquo;article.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-19fb1b1 elementor-widget elementor-widget-heading\" data-id=\"19fb1b1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Un enrichissement plus complexe\n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0bded97 elementor-widget elementor-widget-text-editor\" data-id=\"0bded97\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Imaginons un cas plus complexe : le syst\u00e8me de paiement publie un \u00e9v\u00e9nement de paiement. Mais ce paiement est li\u00e9 \u00e0 une commande, qui a son propre cycle de vie, g\u00e9r\u00e9 dans une plusieurs autres applications. Et cette commande est li\u00e9e \u00e0 un client, qui a \u00e9galement un cycle de vie propre, g\u00e9r\u00e9 dans un CRM.<\/p>\n<p>Ici on va mettre en place une logique de filtrage \/ capture plus complexe, mais le code des fonctions d&rsquo;enrichissement ne change pas !<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7d443ed elementor-widget elementor-widget-image\" data-id=\"7d443ed\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"844\" src=\"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/EventBridge-NotificationToECST-971x1024.png\" class=\"attachment-large size-large wp-image-1037\" alt=\"\" srcset=\"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/EventBridge-NotificationToECST-971x1024.png 971w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/EventBridge-NotificationToECST-285x300.png 285w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/EventBridge-NotificationToECST-768x810.png 768w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/EventBridge-NotificationToECST-1457x1536.png 1457w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/EventBridge-NotificationToECST-11x12.png 11w, https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/EventBridge-NotificationToECST.png 1661w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-824e243 elementor-widget elementor-widget-heading\" data-id=\"824e243\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">D\u00e9mo \/ mise en oeuvre concr\u00e8te !\n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7a7b11c elementor-widget elementor-widget-text-editor\" data-id=\"7a7b11c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Nous avons d\u00e9montr\u00e9 dans ce blog post comment r\u00e9concilier les deux principaux mod\u00e8les de gestion d&rsquo;\u00e9v\u00e9nements, gr\u00e2ce \u00e0 AWS EventBridge et AWS Lambda<\/p>\n<p>Vous trouverez dans <a href=\"https:\/\/github.com\/psantus\/event-driven-notification-vs-ecst\" target=\"_blank\" rel=\"noopener noreferrer\">ce repo Github<\/a> deux mod\u00e8les CloudFormation permettant de d\u00e9ployer ces exemples pleinement fonctionnels.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Les architectures orient\u00e9es \u00e9v\u00e9nement offrent de nombreux b\u00e9n\u00e9fices : le d\u00e9couplage entre les composants applicatifs permet une meilleure r\u00e9silience \u00e0 la panne, un flux de traitement adapt\u00e9 aux ressources disponibles, un faible temps d&rsquo;attente pour l&rsquo;utilisateur (pourquoi traiter de fa\u00e7on synchrone ce qu&rsquo;il peut l&rsquo;\u00eatre apr\u00e8s lui avoir r\u00e9pondu ?).<\/p>","protected":false},"author":1,"featured_media":1041,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[57,14,53,54,55],"class_list":["post-1034","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-architecture","tag-aws","tag-event","tag-event-driven-architure","tag-eventbridge"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Architecture orient\u00e9e \u00e9v\u00e9nement : r\u00e9concilier Notifications et Ev\u00e9nements &quot;Complets&quot; - TerraCloud<\/title>\n<meta name=\"description\" content=\"Ev\u00e9nement minimaliste ou complet ? En architecture orient\u00e9e \u00e9v\u00e9nement, les diff\u00e9rents mod\u00e8les existent. Nous proposons ici une mani\u00e8re de r\u00e9concilier simplement les diff\u00e9rentes approches\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/dev.to\/aws-builders\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Architecture orient\u00e9e \u00e9v\u00e9nement : r\u00e9concilier Notifications et Ev\u00e9nements &quot;Complets&quot; - TerraCloud\" \/>\n<meta property=\"og:description\" content=\"Ev\u00e9nement minimaliste ou complet ? En architecture orient\u00e9e \u00e9v\u00e9nement, les diff\u00e9rents mod\u00e8les existent. Nous proposons ici une mani\u00e8re de r\u00e9concilier simplement les diff\u00e9rentes approches\" \/>\n<meta property=\"og:url\" content=\"https:\/\/dev.to\/aws-builders\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697\" \/>\n<meta property=\"og:site_name\" content=\"TerraCloud\" \/>\n<meta property=\"article:published_time\" content=\"2024-07-04T14:50:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-02T15:16:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST.png\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"450\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"terracloud\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"terracloud\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/dev.to\\\/aws-builders\\\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/old-web.terracloud.fr\\\/blog\\\/2024\\\/07\\\/04\\\/architecture-orientee-evenement-reconcilier-notifications-et-evenements-complets\\\/\"},\"author\":{\"name\":\"terracloud\",\"@id\":\"https:\\\/\\\/old-web.terracloud.fr\\\/#\\\/schema\\\/person\\\/c84d6bb6d61012fe7510ecd7c4a0407b\"},\"headline\":\"Architecture orient\u00e9e \u00e9v\u00e9nement : r\u00e9concilier Notifications et Ev\u00e9nements \u00ab\u00a0Complets\u00a0\u00bb\",\"datePublished\":\"2024-07-04T14:50:00+00:00\",\"dateModified\":\"2024-09-02T15:16:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/old-web.terracloud.fr\\\/blog\\\/2024\\\/07\\\/04\\\/architecture-orientee-evenement-reconcilier-notifications-et-evenements-complets\\\/\"},\"wordCount\":973,\"publisher\":{\"@id\":\"https:\\\/\\\/old-web.terracloud.fr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/dev.to\\\/aws-builders\\\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/old-web.terracloud.fr\\\/wp-content\\\/uploads\\\/2024\\\/07\\\/NotificationVsECST.png\",\"keywords\":[\"architecture\",\"aws\",\"event\",\"event-driven architure\",\"eventbridge\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/old-web.terracloud.fr\\\/blog\\\/2024\\\/07\\\/04\\\/architecture-orientee-evenement-reconcilier-notifications-et-evenements-complets\\\/\",\"url\":\"https:\\\/\\\/dev.to\\\/aws-builders\\\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697\",\"name\":\"Architecture orient\u00e9e \u00e9v\u00e9nement : r\u00e9concilier Notifications et Ev\u00e9nements \\\"Complets\\\" - TerraCloud\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/old-web.terracloud.fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/dev.to\\\/aws-builders\\\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/dev.to\\\/aws-builders\\\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/old-web.terracloud.fr\\\/wp-content\\\/uploads\\\/2024\\\/07\\\/NotificationVsECST.png\",\"datePublished\":\"2024-07-04T14:50:00+00:00\",\"dateModified\":\"2024-09-02T15:16:26+00:00\",\"description\":\"Ev\u00e9nement minimaliste ou complet ? En architecture orient\u00e9e \u00e9v\u00e9nement, les diff\u00e9rents mod\u00e8les existent. Nous proposons ici une mani\u00e8re de r\u00e9concilier simplement les diff\u00e9rentes approches\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/dev.to\\\/aws-builders\\\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/dev.to\\\/aws-builders\\\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/dev.to\\\/aws-builders\\\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697#primaryimage\",\"url\":\"https:\\\/\\\/old-web.terracloud.fr\\\/wp-content\\\/uploads\\\/2024\\\/07\\\/NotificationVsECST.png\",\"contentUrl\":\"https:\\\/\\\/old-web.terracloud.fr\\\/wp-content\\\/uploads\\\/2024\\\/07\\\/NotificationVsECST.png\",\"width\":800,\"height\":450},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/dev.to\\\/aws-builders\\\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/old-web.terracloud.fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Architecture orient\u00e9e \u00e9v\u00e9nement : r\u00e9concilier Notifications et Ev\u00e9nements \u00ab\u00a0Complets\u00a0\u00bb\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/old-web.terracloud.fr\\\/#website\",\"url\":\"https:\\\/\\\/old-web.terracloud.fr\\\/\",\"name\":\"TerraCloud\",\"description\":\"Les deux pieds sur terre, la t\u00eate dans le Cloud\",\"publisher\":{\"@id\":\"https:\\\/\\\/old-web.terracloud.fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/old-web.terracloud.fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/old-web.terracloud.fr\\\/#organization\",\"name\":\"TerraCloud\",\"url\":\"https:\\\/\\\/old-web.terracloud.fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/old-web.terracloud.fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/old-web.terracloud.fr\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/Logo-orange.png\",\"contentUrl\":\"https:\\\/\\\/old-web.terracloud.fr\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/Logo-orange.png\",\"width\":600,\"height\":76,\"caption\":\"TerraCloud\"},\"image\":{\"@id\":\"https:\\\/\\\/old-web.terracloud.fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/old-web.terracloud.fr\\\/#\\\/schema\\\/person\\\/c84d6bb6d61012fe7510ecd7c4a0407b\",\"name\":\"terracloud\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/097721015575d61db7c915fea44fcf2f41f4a94b0cdc56e181770f1f623acab8?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/097721015575d61db7c915fea44fcf2f41f4a94b0cdc56e181770f1f623acab8?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/097721015575d61db7c915fea44fcf2f41f4a94b0cdc56e181770f1f623acab8?s=96&d=mm&r=g\",\"caption\":\"terracloud\"},\"sameAs\":[\"http:\\\/\\\/old-web.terracloud.fr\"],\"url\":\"https:\\\/\\\/old-web.terracloud.fr\\\/en\\\/blog\\\/author\\\/terracloud\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Architecture orient\u00e9e \u00e9v\u00e9nement : r\u00e9concilier Notifications et Ev\u00e9nements \"Complets\" - TerraCloud","description":"Ev\u00e9nement minimaliste ou complet ? En architecture orient\u00e9e \u00e9v\u00e9nement, les diff\u00e9rents mod\u00e8les existent. Nous proposons ici une mani\u00e8re de r\u00e9concilier simplement les diff\u00e9rentes approches","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/dev.to\/aws-builders\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697","og_locale":"en_US","og_type":"article","og_title":"Architecture orient\u00e9e \u00e9v\u00e9nement : r\u00e9concilier Notifications et Ev\u00e9nements \"Complets\" - TerraCloud","og_description":"Ev\u00e9nement minimaliste ou complet ? En architecture orient\u00e9e \u00e9v\u00e9nement, les diff\u00e9rents mod\u00e8les existent. Nous proposons ici une mani\u00e8re de r\u00e9concilier simplement les diff\u00e9rentes approches","og_url":"https:\/\/dev.to\/aws-builders\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697","og_site_name":"TerraCloud","article_published_time":"2024-07-04T14:50:00+00:00","article_modified_time":"2024-09-02T15:16:26+00:00","og_image":[{"width":800,"height":450,"url":"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST.png","type":"image\/png"}],"author":"terracloud","twitter_card":"summary_large_image","twitter_misc":{"Written by":"terracloud","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/dev.to\/aws-builders\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697#article","isPartOf":{"@id":"https:\/\/old-web.terracloud.fr\/blog\/2024\/07\/04\/architecture-orientee-evenement-reconcilier-notifications-et-evenements-complets\/"},"author":{"name":"terracloud","@id":"https:\/\/old-web.terracloud.fr\/#\/schema\/person\/c84d6bb6d61012fe7510ecd7c4a0407b"},"headline":"Architecture orient\u00e9e \u00e9v\u00e9nement : r\u00e9concilier Notifications et Ev\u00e9nements \u00ab\u00a0Complets\u00a0\u00bb","datePublished":"2024-07-04T14:50:00+00:00","dateModified":"2024-09-02T15:16:26+00:00","mainEntityOfPage":{"@id":"https:\/\/old-web.terracloud.fr\/blog\/2024\/07\/04\/architecture-orientee-evenement-reconcilier-notifications-et-evenements-complets\/"},"wordCount":973,"publisher":{"@id":"https:\/\/old-web.terracloud.fr\/#organization"},"image":{"@id":"https:\/\/dev.to\/aws-builders\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697#primaryimage"},"thumbnailUrl":"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST.png","keywords":["architecture","aws","event","event-driven architure","eventbridge"],"articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/old-web.terracloud.fr\/blog\/2024\/07\/04\/architecture-orientee-evenement-reconcilier-notifications-et-evenements-complets\/","url":"https:\/\/dev.to\/aws-builders\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697","name":"Architecture orient\u00e9e \u00e9v\u00e9nement : r\u00e9concilier Notifications et Ev\u00e9nements \"Complets\" - TerraCloud","isPartOf":{"@id":"https:\/\/old-web.terracloud.fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/dev.to\/aws-builders\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697#primaryimage"},"image":{"@id":"https:\/\/dev.to\/aws-builders\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697#primaryimage"},"thumbnailUrl":"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST.png","datePublished":"2024-07-04T14:50:00+00:00","dateModified":"2024-09-02T15:16:26+00:00","description":"Ev\u00e9nement minimaliste ou complet ? En architecture orient\u00e9e \u00e9v\u00e9nement, les diff\u00e9rents mod\u00e8les existent. Nous proposons ici une mani\u00e8re de r\u00e9concilier simplement les diff\u00e9rentes approches","breadcrumb":{"@id":"https:\/\/dev.to\/aws-builders\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/dev.to\/aws-builders\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/dev.to\/aws-builders\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697#primaryimage","url":"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST.png","contentUrl":"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2024\/07\/NotificationVsECST.png","width":800,"height":450},{"@type":"BreadcrumbList","@id":"https:\/\/dev.to\/aws-builders\/event-driven-architecture-reconcile-notification-and-event-carried-state-transfer-patterns-5697#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/old-web.terracloud.fr\/"},{"@type":"ListItem","position":2,"name":"Architecture orient\u00e9e \u00e9v\u00e9nement : r\u00e9concilier Notifications et Ev\u00e9nements \u00ab\u00a0Complets\u00a0\u00bb"}]},{"@type":"WebSite","@id":"https:\/\/old-web.terracloud.fr\/#website","url":"https:\/\/old-web.terracloud.fr\/","name":"TerraCloud","description":"Feet on the ground, head in the Cloud","publisher":{"@id":"https:\/\/old-web.terracloud.fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/old-web.terracloud.fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/old-web.terracloud.fr\/#organization","name":"TerraCloud","url":"https:\/\/old-web.terracloud.fr\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/old-web.terracloud.fr\/#\/schema\/logo\/image\/","url":"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2023\/08\/Logo-orange.png","contentUrl":"https:\/\/old-web.terracloud.fr\/wp-content\/uploads\/2023\/08\/Logo-orange.png","width":600,"height":76,"caption":"TerraCloud"},"image":{"@id":"https:\/\/old-web.terracloud.fr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/old-web.terracloud.fr\/#\/schema\/person\/c84d6bb6d61012fe7510ecd7c4a0407b","name":"terracloud","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/097721015575d61db7c915fea44fcf2f41f4a94b0cdc56e181770f1f623acab8?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/097721015575d61db7c915fea44fcf2f41f4a94b0cdc56e181770f1f623acab8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/097721015575d61db7c915fea44fcf2f41f4a94b0cdc56e181770f1f623acab8?s=96&d=mm&r=g","caption":"terracloud"},"sameAs":["http:\/\/old-web.terracloud.fr"],"url":"https:\/\/old-web.terracloud.fr\/en\/blog\/author\/terracloud\/"}]}},"_links":{"self":[{"href":"https:\/\/old-web.terracloud.fr\/en\/wp-json\/wp\/v2\/posts\/1034","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/old-web.terracloud.fr\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/old-web.terracloud.fr\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/old-web.terracloud.fr\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/old-web.terracloud.fr\/en\/wp-json\/wp\/v2\/comments?post=1034"}],"version-history":[{"count":15,"href":"https:\/\/old-web.terracloud.fr\/en\/wp-json\/wp\/v2\/posts\/1034\/revisions"}],"predecessor-version":[{"id":1055,"href":"https:\/\/old-web.terracloud.fr\/en\/wp-json\/wp\/v2\/posts\/1034\/revisions\/1055"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/old-web.terracloud.fr\/en\/wp-json\/wp\/v2\/media\/1041"}],"wp:attachment":[{"href":"https:\/\/old-web.terracloud.fr\/en\/wp-json\/wp\/v2\/media?parent=1034"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/old-web.terracloud.fr\/en\/wp-json\/wp\/v2\/categories?post=1034"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/old-web.terracloud.fr\/en\/wp-json\/wp\/v2\/tags?post=1034"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}