Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events 事件驱动体系结构中的主题粒度_Events_Architecture_Soa_Event Driven_Event Driven Design - Fatal编程技术网

Events 事件驱动体系结构中的主题粒度

Events 事件驱动体系结构中的主题粒度,events,architecture,soa,event-driven,event-driven-design,Events,Architecture,Soa,Event Driven,Event Driven Design,我想知道在事件驱动的面向服务的体系结构中,主题名称的粒度应该是多少 假设我们有一个用户管理系统,用户可以执行不同的操作,如注册、登录、修改某些配置文件属性等。如果我们想将这些更改通知其他服务,我可以考虑一些主题命名的可能性: 每个模型中每个经典CRUD操作一个主题(不包括读取,因为用户状态不变)。我们将创建用户,用户更新,用户删除。这种方法足够通用,但可能会有许多服务订阅用户更新的主题,并丢弃所有那些不修改特定字段的事件 每个业务相关变更一个主题。除了用户创建的和用户删除的之外,我们还可以更新用

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

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

  • 每个模型中每个经典CRUD操作一个主题(不包括读取,因为用户状态不变)。我们将创建
    用户
    用户更新
    用户删除
    。这种方法足够通用,但可能会有许多服务订阅
    用户更新的
    主题,并丢弃所有那些不修改特定字段的事件

  • 每个业务相关变更一个主题。除了
    用户创建的
    用户删除的
    之外,我们还可以更新
    用户电子邮件
    用户登录
    (否则将作为上次登录日期更改的
    用户更新
    事件触发),等等。我的感觉是,尽管这对于那些只对某个非常具体的更改感兴趣的订阅者来说是方便的,但是对于那些需要同步用户发生的任何事情的服务来说,这将更加困难,因为他们必须订阅越来越多的主题,以跟踪用户模型中的所有更改

  • 介于1和3之间的混合,其中当用户更新电子邮件时将发送事件
    用户更新
    用户电子邮件更新
    ,但如果用户更改配置文件,则只发送事件
    用户更新


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


    某些技术(例如RabbitMQ)内置了此功能,而对于其他技术,您可以实施主题注册表并提供自己管理订阅的基础结构。选项2是您的最佳选择,您可以从中获取上下文来源的业务事件。我的2美分,很高兴讨论further@SeanFarmar谢谢你的评论。我在这里看到的缺点是,对于模型中的某些更改,除了将新值同步到服务的其余部分之外,可能没有其他操作。我认为模型中可能会有很多变化,需要在服务之间进行同步,但没有足够的相关性来单独拥有一个主题。关于如何处理这个问题,您有什么进一步的想法吗?基于主题的路由不是执行事件驱动系统的先决条件。我将研究一种服务总线体系结构,其中路由是pub-sub和分散的。