我想知道在事件驱动的面向服务的体系结构中,主题名称的粒度应该是多少。
让我们假设我们有一个用户管理系统,用户可以在其中执行不同的操作,如注册,登录,修改某些配置文件属性等。如果我们想要通知其他服务这些更改,我可以想到一些可能性。主题命名:
user-created
,user-updated
,user-deleted
。这种方法足够通用,但可能会有许多服务订阅user-updated
主题并丢弃所有那些不修改特定字段的事件。user-created
和user-deleted
之外,我们还可以举办像user-email-updated
,user-signed-in
这样的活动(否则将被解雇为user-updated
事件,其中最后一次登录的日期已经改变)等等。我的感觉是即使它会很方便对于那些只对一个非常具体的变化感兴趣的用户来说,那些需要同步用户发生任何事情的服务会更难,因为他们必须订阅越来越多的主题来跟踪所有变化。用户模型。user-updated
和user-email-updated
事件,但如果用户更改了配置文件,则只会发送user-updated
。要做的是实现第二个选项,但是使用主题层次结构实现它,以允许订阅者选择他们感兴趣的粒度(如订阅用户。*或* .updated或user.actions.login等)
某些技术(例如RabbitMQ)内置了此功能,对于其他技术,您可以实现主题注册表并提供基础架构来自行管理订阅