本地任务消息组件需求分析
一、本章介绍
从今天起,我们将开启一个新的组件项目学习。该组件针对业务功能开发中的通用技术场景,提炼出一套技术解决方案,专为解决数据库事务完成时需同时对外发送消息(MQ)或发起HTTP调用的最终一致性问题而设计。
MQ消息发送和HTTP调用无法与数据库写操作纳入同一事务,导致一致性保障困难。若缺乏统一组件支持,各业务系统需自行实现相关逻辑,易引发重复开发和维护难题。为此,我们提炼并开发了该技术组件,统一化解这一共性挑战,从而提升系统的可靠性和开发效率。
二、功能案例
使用方通过引入本地消息组件,使用服务;
三、产品方案
1. 产品概述
基于Spring框架的本地任务消息组件,设计了通用核心功能,便于轻松融入各种业务系统。在业务场景中,它允许在事务内部执行数据库写入操作的同时,添加一条本地消息记录(业务系统需预先建立符合组件标准的本地消息表)。记录插入后,组件立即发布Spring事件,启动事务外部的异步操作,如发送MQ消息或执行HTTP回调。如果异步处理出错,组件自带的定时任务机制(可自定义“门牌号”配置,支持多任务并发扫描以提高吞吐效率)会反复检查并重试,确保最终消息一致性和业务流程的稳定运行。
2. 技术架构

组件定位:Local Task Message 不仅仅是一个工具类功能,而是一个完整的领域服务内核。它具备:
- 独立的领域功能;
- 对本地消息表的完整操作能力(增删改查、状态管理);
- 接收 Spring Event 事件的能力;
- 与外部系统对接 MQ 和 HTTP 的交互处理能力。
使用方式:
- 配置对应的本地消息表(必须与业务事务处于同一个数据库,确保本地事务一致性);
- 引入组件依赖;
- 完成必要的 YML 配置。
- 配置完成后,即可通过注解或服务调用直接使用,无需额外实现补偿、轮询或重试逻辑。
设计优势
- 强一致性保障:业务事务与消息落库原子性提交,避免分布式事务复杂性;
- 可靠投递:内置轮询、触发器或事件驱动机制,确保消息最终被正确处理并发送至 MQ/HTTP;
- 低侵入性:上游业务代码无需关注消息状态管理与重试细节;
- 可扩展:支持 Spring Event 驱动,易于与现有 Spring 生态集成。
通过该组件,上游系统能够以声明式或简洁调用的方式,实现“本地事务 + 可靠外部通知”的标准模式,显著提升系统的稳定性和可维护性。
3. 功能流程
引入本地消息组件后,上游业务系统可以以DAO层入库操作为起点,在同一个本地事务中可靠地驱动消息推送。开发者可以通过两种方式实现这一功能:一是使用注解驱动,这是推荐的方式;二是直接注入并调用核心服务ILocalTaskMessageHandleService。
注解驱动方式基于AOP切面实现,因此更加优雅和简洁。开发者无需手动维护调用关系,也无需在业务代码中显式编写消息处理逻辑,业务代码只需专注于核心领域逻辑即可。组件会在事务提交后自动接管后续处理,从而保持代码的清洁性和低侵入性。
整个消息生命周期完全由组件自主管理。它会在业务事务内原子性地将消息写入本地消息表,确保强一致性。随后通过发布Spring Event事件,由监听器触发推送流程。组件会自动完成对HTTP或MQ的外部调用,并内置重试、幂等等可靠性保障。为了提升并发能力和吞吐量,组件还实现了基于分片或门牌号的任务扫描机制,避免单线程瓶颈。
通过这样的设计,上游系统只需关注正常的入库操作,即可实现“事务成功即消息可靠送达”的完整闭环,无需自行实现补偿逻辑、轮询机制或重试策略,从而大幅降低开发和维护成本。
设计优势
- 强一致性保障:业务事务与消息落库原子性提交,避免分布式事务复杂性;
- 可靠投递:内置轮询、触发器或事件驱动机制,确保消息最终被正确处理并发送至 MQ/HTTP;
- 低侵入性:上游业务代码无需关注消息状态管理与重试细节;
- 可扩展:支持 Spring Event 驱动,易于与现有 Spring 生态集成。
通过该组件,上游系统能够以声明式或简洁调用的方式,实现“本地事务 + 可靠外部通知”的标准模式,显著提升系统的稳定性和可维护性。