首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CQRS和事件源-阅读您自己的事件

CQRS和事件源-阅读您自己的事件
EN

Stack Overflow用户
提问于 2019-10-25 14:07:11
回答 2查看 294关注 0票数 0

目前,我正在实现事件驱动架构,并有一个命令服务(写部分)和另一个查询服务(读取部分)。

我现在在做什么。

CommandService

  • Store

  • 接受关于事件的命令,并在事件上发布事件,侦听这些事件并更新读取模型

这听起来不错,如果你听你自己的事件。假设我听到了来自CommandService的外部事件

event

  • Process

  • 侦听此事件的命令

  • 存储您的域在事件存储中生成的事件,并将此事件发布到事件bus

  • ReadService侦听这些事件并更新读取模型

在这种方法中,我可以看到更新我的读取模型有双重延迟。第一次延迟-> CommandService时间拉出事件第二延迟-> ReadService时间来提取从CommandService生成的事件。

我在想,如果我更新我的ReadService来直接听CommandService事件存储,而不需要事件总线,那么我可以减少其中一个延迟。

你认为如何?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-31 06:20:33

不久前我们也做过类似的事。基本上,我们

  1. --实现流程管理器模式的服务,并使用EventSourcing和Saga在多个服务之间执行一些编排逻辑。存储在数据库中的每个事件都包含一个序列化为Avro格式的EventPayload,其中包含事件发生时进程的状态。该有效载荷包含所有状态,而不仅仅是差异,因此我们在processing.
  2. We've使用Kafka连接器从EventStore中读取时,我们一直在更新该有效负载。基本上,当一个新事件在EventStore中发布时,连接器读取事件并将其发布给卡夫卡(卡夫卡用作EventBus)。放置在另一个服务中的读取模型
  3. 是通过Kafka更新的(这里有两种方法:使用卡夫卡连接JDBC Sink连接器或使用卡夫卡消费者和从消费者进行事务更新)。

我希望它能帮到你!

票数 1
EN

Stack Overflow用户

发布于 2019-10-31 06:28:02

--我在想,如果我更新我的ReadService来直接听CommandService事件存储,而不需要事件总线,那么我可以减少其中一个延迟。

是的,您将减少延迟,但是您将引入两个服务之间的耦合,这并不一定不好,但是如果这两个服务是解耦的(使用总线),您可以独立地扩展每个服务。

此外,如果您使用托管总线(如RabbitMQ ),您将受益于消息确认、多种类型的消息传递和queues..etc。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58560153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档