建设工程监理招标网站,做好的网站怎么链接,培训班有哪些课程,西部数码网站管理助手serv-u默认密码文章目录 Pre领域事件的核心概念领域事件的作用领域事件的识别领域事件的技术实现领域事件的运行机制案例领域事件驱动的优势 Pre
DDD - 微服务设计与领域驱动设计实战(中)_ 解决微服务拆分难题
EDA - Spring Boot构建基于事件驱动的消息系统 领域事件的核心概念
领域事件Domain Event是领域驱动设计DDD中的一个重要概念用于表示在领域中发生的、对业务有重要意义的事件。这些事件通常会导致进一步的业务操作并且在微服务架构中领域事件是实现微服务解耦的关键机制之一。
领域事件的作用 业务解耦领域事件可以切断微服务之间的强依赖关系发布方只需发布事件而不需要关心订阅方的处理结果从而实现微服务之间的解耦。 业务闭环领域事件有助于形成完整的业务闭环。通过事件驱动的方式业务流程可以在不同的微服务之间流转确保业务的连续性和一致性。 最终一致性在微服务架构中领域事件通常采用最终一致性而不是强一致性。这种方式可以减少分布式事务的使用提升系统的性能和可扩展性。 领域事件的识别
在业务分析过程中可以通过以下关键词来识别领域事件
“如果发生……则……”“当做完……的时候请通知……”“发生……时则……”
这些场景中的事件通常会导致进一步的业务操作因此可以被识别为领域事件。 介绍一个保险承保业务过程中有关领域事件的案例。一个保单的生成经历了很多子域、业务状态变更和跨微服务业务数据的传递。这个过程会产生很多的领域事件这些领域事件促成了保险业务数据、对象在不同的微服务和子域之间的流转和角色转换。 在下面这张图中列出了几个关键流程用来说明如何用领域事件驱动设计来驱动承保业务流程 事件起点客户购买保险 - 业务人员完成保单录入 - 生成投保单 - 启动缴费动作
投保微服务生成缴费通知单发布第一个事件缴费通知单已生成将缴费通知单数据发布到消息中间件。收款微服务订阅缴费通知单事件完成缴费操作。缴费通知单已生成领域事件结束。收款微服务缴费完成后发布第二个领域事件缴费已完成将缴费数据发布到消息中间件。原来的订阅方收款微服务这时则变成了发布方。原来的事件发布方投保微服务转换为订阅方。投保微服务在收到缴费信息并确认缴费完成后完成投保单转成保单的操作。缴费已完成领域事件结束。投保微服务在投保单转保单完成后发布第三个领域事件保单已生成将保单数据发布到消息中间件。保单微服务接收到保单数据后完成保单数据保存操作。保单已生成领域事件结束。保单微服务完成保单数据保存后后面还会发生一系列的领域事件以并发的方式将保单数据通过消息中间件发送到佣金、收付费和再保等微服务一直到财务完后保单后续所有业务流程。这里就不详细说了。
总之通过领域事件驱动的异步化机制可以推动业务流程和数据在各个不同微服务之间的流转实现微服务的解耦减轻微服务之间服务调用的压力提升用户体验。 领域事件的技术实现
领域事件的执行需要一系列的组件和技术来支撑。我们来看一下这个领域事件总体技术架构图领域事件处理包括事件构建和发布、事件数据持久化、事件总线、消息中间件、事件接收和处理等 领域事件的技术实现通常包括以下几个步骤 事件构建和发布 事件的基本属性包括事件唯一标识、发生时间、事件类型和事件源。事件的业务属性记录事件发生时的业务数据这些数据会随事件传输到订阅方。事件发布可以通过应用服务、领域服务或消息中间件来完成。 事件数据持久化 事件数据持久化可以用于系统之间的数据对账或审计。事件数据可以持久化到本地业务数据库的事件表中或者持久化到共享的事件数据库中。 事件总线EventBus 事件总线是微服务内聚合之间领域事件的重要组件负责事件的分发和接收。事件总线可以同步或异步地传递数据确保事件在微服务内外的订阅者之间正确传递。 消息中间件 跨微服务的领域事件通常使用消息中间件如Kafka、RabbitMQ来实现事件的发布和订阅。消息中间件可以确保事件在微服务之间的可靠传递。 事件接收和处理 订阅方通过监听机制接收事件数据并将其持久化到本地数据库。订阅方在领域服务中处理事件完成后续的业务操作。 领域事件的运行机制案例
以保险承保业务为例领域事件的运行机制如下 事件起点出单员生成投保单核保通过后发起生成缴费通知单的操作。 缴费通知单生成 投保微服务生成缴费通知单并发布“缴费通知单已生成”事件。收款微服务订阅该事件完成缴费操作。 缴费完成 收款微服务缴费完成后发布“缴费已完成”事件。投保微服务订阅该事件完成投保单转保单的操作。 保单生成 投保微服务在投保单转保单完成后发布“保单已生成”事件。保单微服务订阅该事件完成保单数据的保存操作。 后续业务流程 保单微服务完成保单数据保存后会触发一系列后续的领域事件推动业务流程在佣金、收付费、再保等微服务之间流转。 领域事件驱动的优势 解耦微服务通过领域事件微服务之间的依赖关系被弱化发布方和订阅方可以独立演化。 提升系统性能领域事件采用最终一致性减少了分布式事务的使用提升了系统的性能和可扩展性。 支持复杂业务流程领域事件可以支持复杂的业务流程尤其是在跨多个微服务的场景中事件驱动的方式可以简化系统的设计和维护。