洋葱架构中的 Kafka 消费者

iam*_*rot 5 java domain-driven-design

我正在处理以下项目,DDD并且consumers必须Kafka Queue. 我的问题很简单,消费者居住在Onion Architecture哪里Hexagonal Architecture?它们是事件处理程序还是应该成为基础设施的一部分?

我用来Kafka Consumers监听其他聚合根的更改事件,并希望将数据存储在我当前的aggregate. 基本上将数据从一个微服务复制到另一个微服务。

Fra*_*lls 2

我的看法是:

  1. 你的聚合是核心

  2. 消息处理程序是用例,它使用依赖项(如存储库接口)和核心来执行业务用例。

  3. 有基础设施代码可以从队列中查看消息并触发用例

通过这种方法,您可以对用例进行单元测试,而无需担心基础设施,并且可以替换整个消息队列技术。同样的方法也适用于处理 API 请求。实际上,唯一的区别是,使用 API 可以同步返回响应,而使用消息传递则不能。

作为实际说明,在 .NET 中,我使用名为Mediatr 的库来实现和触发用例。在java中,我发现PipelinR乍一看看起来很相似。这种类型的方法允许您以相同的方式实现所有同步和异步使用的所有用例。