事件驱动的架构和事件结构 [英] Event-driven architecture and structure of events

查看:135
本文介绍了事件驱动的架构和事件结构的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是EDA的新手,我已经学到了很多好处,并且可能有兴趣在下一个项目中应用它,但是仍然不了解.

引发事件时,哪种模式最合适:

  1. 将事件命名为"CustomerUpdate",并包含有关客户的所有信息(是否更新)
  2. 将事件命名为"CustomerUpdate",并且仅包含真正更新过的信息
  3. 将事件命名为"CustomerUpdate",并包含最低限度的信息(标识符)和/或URI,以使消费者检索有关此客户的信息.

我问这个问题,因为我们的一些事件可能很繁琐,也很频繁.

感谢您的回答和时间.

解决方案

将事件命名为"CustomerUpdate"

首先让我们从您的事件名称开始.事件的目的是描述已经发生的事情.这与命令不同,后者发出尚未发生的事情的指令.

您的事件名称"CustomerUpdate"在这方面听起来模棱两可,因为它可能描述的是过去的事情或将来的事情.

CustomerUpdated 会更好,但是即使这样, Updated 还是另一个模棱两可的术语,并且在业务环境中不是特定的.为什么在这种情况下更新了客户?是因为他们更改了付款明细吗?搬家了吗他们从银级升为金级了吗?可以根据需要进行特定的事件.

乍一看,这似乎有点过分考虑,但是当您从事件有效负载中删除数据和上下文时,事件命名就变得尤为重要,而更倾向于 skinny 事件(问题中的选项3" ,我将在下面讨论).

这并不意味着总是建议在这种粒度级别上定义事件,仅是它是一条在项目早期向您开放的途径,可能会在以后派发红利(或可能使您陷入困境)数千种事件类型.

回到您的实际问题,让我们依次选择每个选项:

将事件命名为"CustomerUpdate",并包含所有信息(已更新 关于客户)

我们将此称为胖"消息的样式".

胖消息(也称为快照)表示所描述实体在给定时间点的状态,其中所有事件上下文都存在于有效负载中.它们很有趣,因为消息本身代表了服务和消费者之间的契约.它们可用于在业务域之间传递状态变化,在这种情况下,最好由消费者在消息处理期间显示所有事件上下文.

优势:

  • 自我一致性-完全可以在不了解其他系统的情况下使用.
  • 易于消费(upsert).

缺点:

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆