知识卡片

CDC增量推送:让业务处理逻辑与事件发布逻辑彻底解耦

普通读书笔记卡

内容

消息中间件发布事件主要有两种机制。应用逻辑推送是在发布者微服务产生领域事件时,由应用代码逻辑同时完成业务数据和事件数据的持久化,并直接把事件数据推送到消息中间件,这个过程需要引入事务机制来保证”业务逻辑执行”和”消息发布”两者的数据强一致,但这也意味着业务代码里必须显式包含发消息这个动作,业务逻辑和事件发布逻辑写在了同一段代码里。数据库数据增量推送机制则完全不同:业务代码只需要把事件数据正常持久化到数据库,之后通过数据库日志捕获技术(CDC)读取这些新增的事件数据,由一个独立的、和业务代码无关的通道把增量数据推送到消息中间件——应用处理逻辑和领域事件处理逻辑因此彻底独立,业务代码完全不需要关心”这条数据之后要被发布成事件”这件事。这个案例给出一条通用的架构解耦思路:当”完成一件事”和”通知其他人这件事已完成”这两个动作被写在同一段代码里时,天然会产生耦合(需要显式处理消息发送失败、需要事务保证两者一致);如果能把”通知”这个动作从主流程里剥离,改由一个旁路的、监听数据变化的独立通道来完成,主流程代码会更纯粹,也不再需要为了保证消息发布成功而承担额外的事务复杂度。

参考来源

- 位置:第9章《领域事件:解耦微服务的关键》"9.3 领域事件驱动实现机制","4. 消息中间件"(源文件:_epub-src/OEBPS/Text/chapter3-5-3.xhtml) - 结论依据:原文说明"数据库数据增量推送机制是在事件数据完成持久化后,通过数据库日志捕获技术(Change Data Capture,CDC)获取事件增量数据,并将事件增量数据推送到消息中间件,完成事件发布的过程。这样,应用处理逻辑与领域事件处理逻辑相互独立,有利于实现业务处理和事件发布处理两者的逻辑解耦",直接支撑本卡片结论。 - 原始内容:应用逻辑推送机制……需要引入事务机制,确保业务逻辑和消息发布的数据强一致性。数据库数据增量推送机制是在事件数据完成持久化后,通过数据库日志捕获技术……获取事件增量数据……这样,应用处理逻辑与领域事件处理逻辑相互独立,有利于实现业务处理和事件发布处理两者的逻辑解耦。