模型更新事件的正文

时间:2019-03-04 12:03:01

标签: events architecture event-driven event-driven-design

让我们想象一下,我们有一个用户对象,并且我们想使用事件通过面向服务的体系结构同步该对象的状态。关于修改用户时发送的事件,我想知道以下哪个选项更适合事件的正文:

  1. 仅发送已修改的字段。
  2. 发送用户对象中的所有字段,让订户负责检查哪些字段进行了修改。

在我正在考虑的示例中,以下情况是可行的:

  1. 在服务A中,用户的字段profile被更新,并且主题user-updated事件中的事件被发送
  2. 订阅该主题的
  3. 服务B更新了用户信息,并因此更新了该用户的字段contact-email。鉴于用户状态已更改,事件将发送到同一主题。
  4. 也订阅了该主题的
  5. 服务A接收事件并在本地更新用户的contact-email字段。假定用户状态已更改,则将事件发送到同一主题。
  6. 服务B收到仅contact-email发生更改的最后一个事件,并尝试更新用户。由于现有用户信息和接收到的用户信息之间没有变化,因此状态也没有变化,并且没有其他事件发送到user-updated主题。

即使只有2个服务跟踪用户状态,此过程对我来说也相当复杂。在一个真实的例子中,此类服务的数量可能会更高。

1 个答案:

答案 0 :(得分:0)

我个人只会发送修改后的字段(如果没有其他内容),以使消息的有效负载保持较小。大多数邮件系统会优化/限制小邮件,当您发送多于K的数据时,效果会很差。

此外,我很困惑为什么您要在此处进行多主复制。为什么您没有一个用户服务,这两个服务都向其中发送更新,而其他服务从中获取信息。您可以在客户端服务中缓存数据,然后您的事件可以成为缓存过期,而不是数据复制事件。