使用spring modulith轻松地将选定的域事件外部化到消息代理:
- 添加例如,Kafka集成模块
- 选择要外部化的域类型(例如,通过使用(At)外部化)
点击标题见案例,展示如何自动将域事件外部化到 Kafka。两个基本必需的步骤是:
- 将依赖项添加spring-modulith-events-kafka到项目中(runtime范围足够)。
- 添加spring-modulith-events-api依赖项来注释要自动外部化的事件类型@Externalized(请参阅 参考资料OrderCompleted)。
TestApplication(在src/test/java) 中声明了一个KafkaOperations实例,这样我们就不需要为示例运行实际的 Kafka 实例。声明的 bean 只是触发一些模拟与 Kafka 实际交互的日志输出。
使用运行测试应用程序./mvnw spring-boot:test-run应显示以下输出:
22:20:20.398 D - main : Registering domain event externalization to Kafka… (1) |
- 在应用程序引导时,spring-modulith-events-kafka模块注册一个ApplicationModuleListener将侦听要外部化的域事件的模块。
- 一旦启动,应用程序的方法就会调用最终导致事件发布的main业务方法。反过来,它又用 Spring Modulith 进行注释,因此符合外部化的条件。OrderManagementOrderCompleted@Externalized
- 事件发布基础设施检测到@ApplicationModuleListener对事件感兴趣,它会在事件发布注册表中创建一个条目来跟踪事件的处理。
- 外部化@ApplicationModuleListener被触发(注意它如何异步运行,由task-1线程指示)。
- 我们的模拟KafkaOperations被调用并触发模拟实际发送的日志消息。
- 事件发布注册表最终将发布标记为已完成,因为发送已成功完成。