六边形架构中的Kafka流

问题描述 投票:0回答:1

我正在六边形架构中创建服务,该服务消耗主题中的数据。在同一项目中,我想使用 kafka 流将几个主题合并为一个主题,然后使用适配器中的 kafka 流创建的该主题中的数据。我有一个问题,我应该将卡夫卡流代码放在我的六边形架构中的哪里?在我的域中,适配器似乎不是一个好地方。这只是稍后将在其中使用的主题数据转换。

java apache-kafka apache-kafka-streams system-design hexagonal-architecture
1个回答
0
投票

六边形架构的目的是分离业务代码和框架代码。除此之外,框架代码可以访问业务代码,但业务代码不应该访问“直接”框架代码。

在下面的结构中,我模拟了六边形架构中的银行账户流程。客户端发送开户请求,请求到域进行银行开户流程,如果业务需要将账户详细信息保存到数据库,它使用端口(端口是接口或其他抽象结构)来访问基础设施。

-account
   - infrastructure 
      - rest
         - AccountRestController.java
      - dto
         - BankAccountOpeningRequest.java
         - BankAccountOpeningResponse.java
      - adapter
         - AccountJpaDataAdapter.java
      - jpa
         - repository
            - AccountJpaRepository.java
         - entity
            - AccountEntity.java
         
   - domain 
      - port
         - AccountDataPort.java
      - handler
         - AccountUseCaseHandler.java
      - usecase
         - BankAccountOpening.java
      - model
         - BankAccount.java

当然,开发者可以改变包结构、类结构或者其他东西,但有一点是绝对不能改变的业务代码和框架代码的分离

对于你的问题,这取决于你的业务,但是Kafka代码不能放入域(业务)。你可以在框架端创建一个kafka消费者类,例如ABCKafkaConsumer.java,然后这个消费者类可以在你的kafka适配器中使用。

© www.soinside.com 2019 - 2024. All rights reserved.