java - 微服务与事件溯源 (CQRS) 交互的最佳实践

标签 java domain-driven-design microservices cqrs event-sourcing

我有一个 API 调用需要使用多个聚合。关于它应该如何与聚合交互,我的脑海中有以下 2 个想法,但我对其他想法持开放态度。

将命令从一个微服务发送到另一个微服务是一种好的做法吗?还是在微服务 B 上设置一个事件处理程序来对来自服务 A 的事件作出 react 并在微服务 B 内生成命令会更好吗?

最佳答案

Is it good practice to send commands from one microservice to another one? Or is it better to have an event handler on microservice B that reacts to events from service A and generates the command all within the microservice B?

在服务架构中需要认识到的重要一点是:我们希望服务是自治的。因此,当 B 因维护而停机时,A 应该继续工作,反之亦然。

这意味着我们需要支持从 A 到 B 的异步消息传递。

当前的“最佳实践”是,您正在处理异步传递的消息,那么语义应该是过去时:SomethingHappened位于AB 会根据自己的判断在自己的时间使用react或不使用react。

这有关系吗?很难说——handle(Event)是一个命令CommandReceived是一个事件

注意:这实际上只是服务和消息传递——事件溯源/CQRS 确实不参与其中。

Martin Fowler 描述 Domain Events 2005 年。

Each Domain Event captures information from the external stimulus.

如果您认为 AB外部(如果它们之间存在服务边界,这是有道理的),那么领域事件模式的语义可能非常适合。

关于java - 微服务与事件溯源 (CQRS) 交互的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55353966/

相关文章:

java - DDD 设计+使用事件溯源时的不变性好主意吗?

java - 如何访问在 Java 中实现的也具有同名方法的父类(super class)的字段?

java - 如何使用 mockito 进行集成测试

Java 套接字聊天应用程序 - 客户端 ObjectInputStream 获取/读取错误的响应对象

java - 您是否应该将实体 Bean 用于域模型

architecture - DDD 架构 - 通用方法/助手的放置位置

domain-driven-design - DDD : What kinds of behavior should I put on a domain entity?

java - 使用SearchView到ListView进行搜索(关于JSON)

java - 使用 micronaut cli 创建 Controller 时如何选择包/文件夹?

windows-services - 消息队列消费者应该如何在微服务环境中模拟 Identity Server 3 中的用户?