事件驱动架构中的主题粒度

问题描述 投票:1回答:1

我想知道在事件驱动的面向服务的体系结构中,主题名称的粒度应该是多少。

让我们假设我们有一个用户管理系统,用户可以在其中执行不同的操作,如注册,登录,修改某些配置文件属性等。如果我们想要通知其他服务这些更改,我可以想到一些可能性。主题命名:

  1. 每个模型中每个经典CRUD操作的一个主题(不包括读取,因为用户的状态不会改变)。我们会有user-createduser-updateduser-deleted。这种方法足够通用,但可能会有许多服务订阅user-updated主题并丢弃所有那些不修改特定字段的事件。
  2. 每个与业务相关的变更的一个主题。除了user-createduser-deleted之外,我们还可以举办像user-email-updateduser-signed-in这样的活动(否则将被解雇为user-updated事件,其中最后一次登录的日期已经改变)等等。我的感觉是即使它会很方便对于那些只对一个非常具体的变化感兴趣的用户来说,那些需要同步用户发生任何事情的服务会更难,因为他们必须订阅越来越多的主题来跟踪所有变化。用户模型。
  3. 1到3之间的混合,当用户更新电子邮件时,将发送user-updateduser-email-updated事件,但如果用户更改了配置文件,则只会发送user-updated
events architecture soa event-driven event-driven-design
1个回答
1
投票

要做的是实现第二个选项,但是使用主题层次结构实现它,以允许订阅者选择他们感兴趣的粒度(如订阅用户。*或* .updated或user.actions.login等)

某些技术(例如RabbitMQ)内置了此功能,对于其他技术,您可以实现主题注册表并提供基础架构来自行管理订阅

© www.soinside.com 2019 - 2024. All rights reserved.