news 2026/5/7 10:52:28

JEECG-Boot分布式事务:最大努力通知模式终极实现指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JEECG-Boot分布式事务:最大努力通知模式终极实现指南

JEECG-Boot分布式事务:最大努力通知模式终极实现指南

【免费下载链接】jeecg-bootAI低代码平台,支持「低代码 + 零代码」双模式:零代码 5 分钟搭建业务系统,低代码模式一键生成前后端代码。 内置AI 应用,支持AI聊天、知识库、流程编排、MCP与插件,支持各种模型。Skills能力实现:一句话画流程图、设计表单、生成系统。 引领 AI生成→在线配置→代码生成→手工合并的开发模式,解决Java项目80%的重复工作,快速提高效率,又不失灵活性。项目地址: https://gitcode.com/GitHub_Trending/je/jeecg-boot

JEECG-Boot作为一款AI低代码平台,支持「低代码 + 零代码」双模式,能帮助开发者5分钟搭建业务系统,一键生成前后端代码。在分布式系统开发中,事务一致性是核心挑战之一,而最大努力通知模式是解决分布式事务的重要方案。本文将详细介绍如何在JEECG-Boot中实现最大努力通知模式,确保分布式事务的最终一致性。

什么是最大努力通知模式?

最大努力通知模式是分布式事务中的一种柔性事务解决方案,其核心思想是通过消息队列重试机制,尽可能确保事务的最终一致性。当主业务完成后,系统会异步通知从业务,如果通知失败,会通过定时任务进行多次重试,直到达到最大重试次数或从业务确认接收。

这种模式适用于对一致性要求不是特别严格,但需要尽可能保证数据可靠的场景,如订单状态通知、支付结果同步等。

JEECG-Boot中的技术支持

JEECG-Boot内置了完善的消息队列定时任务支持,为实现最大努力通知模式提供了基础:

  • 消息队列:支持RabbitMQ和RocketMQ,可通过jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-rabbitmq/和jeecg-server-cloud/jeecg-visual/jeecg-cloud-test/jeecg-cloud-test-rocketmq/模块进行测试和集成。
  • 定时任务:基于XXL-Job实现,支持任务调度、失败重试等功能,相关表结构定义在jeecg-boot/db/tables_xxl_job.sql中,可配置失败重试次数、间隔时间等参数。

最大努力通知模式实现步骤

1. 设计消息表

首先需要设计一张消息表,用于存储待发送的通知消息,包含消息ID、业务ID、通知状态、重试次数、下次重试时间等字段。示例表结构如下:

CREATE TABLE `t_notify_message` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `message_id` varchar(64) NOT NULL COMMENT '消息唯一标识', `business_id` varchar(64) NOT NULL COMMENT '业务ID', `content` text NOT NULL COMMENT '消息内容', `status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '状态:0-待发送,1-已发送,2-发送失败', `retry_count` int(11) NOT NULL DEFAULT 0 COMMENT '重试次数', `next_retry_time` datetime DEFAULT NULL COMMENT '下次重试时间', `create_time` datetime NOT NULL COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_message_id` (`message_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='通知消息表';

2. 发送通知消息

在主业务完成后,将通知消息存入消息表,并发送到消息队列。JEECG-Boot中可通过RabbitMQTemplate或RocketMQTemplate发送消息,示例代码如下:

@Service public class OrderService { @Autowired private RabbitTemplate rabbitTemplate; @Autowired private NotifyMessageMapper notifyMessageMapper; @Transactional public void createOrder(Order order) { // 保存订单 orderMapper.insert(order); // 创建通知消息 NotifyMessage message = new NotifyMessage(); message.setMessageId(UUID.randomUUID().toString()); message.setBusinessId(order.getId().toString()); message.setContent(JSON.toJSONString(order)); message.setStatus(0); message.setRetryCount(0); message.setCreateTime(new Date()); notifyMessageMapper.insert(message); // 发送消息到队列 rabbitTemplate.convertAndSend("notify.exchange", "notify.routing.key", message); } }

3. 消费消息并处理

从消息队列中消费消息,调用从业务接口。如果调用成功,更新消息状态为已发送;如果失败,更新重试次数和下次重试时间。

@Component public class NotifyMessageConsumer { @Autowired private NotifyMessageMapper notifyMessageMapper; @Autowired private RemoteService remoteService; @RabbitListener(queues = "notify.queue") public void handleMessage(NotifyMessage message) { try { // 调用远程接口 remoteService.notify(message.getBusinessId(), message.getContent()); // 更新消息状态 message.setStatus(1); notifyMessageMapper.updateById(message); } catch (Exception e) { // 处理失败,更新重试信息 message.setRetryCount(message.getRetryCount() + 1); message.setNextRetryTime(calculateNextRetryTime(message.getRetryCount())); notifyMessageMapper.updateById(message); } } // 计算下次重试时间,采用指数退避策略 private Date calculateNextRetryTime(int retryCount) { long delay = (long) (Math.pow(2, retryCount) * 1000); return new Date(System.currentTimeMillis() + delay); } }

4. 定时任务重试

通过XXL-Job定时任务,定期扫描消息表中状态为待发送且下次重试时间已到的消息,重新发送。

@Component public class NotifyRetryJob { @Autowired private NotifyMessageMapper notifyMessageMapper; @Autowired private RabbitTemplate rabbitTemplate; @XxlJob("notifyRetryJob") public void execute() { // 查询需要重试的消息 QueryWrapper<NotifyMessage> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("status", 0) .le("next_retry_time", new Date()) .lt("retry_count", 5); // 最大重试次数 List<NotifyMessage> messages = notifyMessageMapper.selectList(queryWrapper); for (NotifyMessage message : messages) { // 重新发送消息 rabbitTemplate.convertAndSend("notify.exchange", "notify.routing.key", message); } } }

关键配置与优化

1. 消息队列配置

在jeecg-server-cloud/jeecg-cloud-gateway/src/main/resources/application.yml中配置消息队列连接信息:

spring: rabbitmq: host: localhost port: 5672 username: guest password: guest virtual-host: /

2. 定时任务配置

在XXL-Job管理界面配置定时任务,设置Cron表达式(如0 */1 * * * ?表示每分钟执行一次),并指定最大重试次数(如5次)。相关配置可参考jeecg-boot/db/tables_xxl_job.sql中的executor_fail_retry_count字段。

3. 重试策略优化

采用指数退避策略计算重试间隔,避免因网络波动等临时问题导致的频繁重试。如第1次重试间隔1秒,第2次2秒,第3次4秒,以此类推。

总结

最大努力通知模式是JEECG-Boot中实现分布式事务最终一致性的有效方案,通过消息队列、定时任务和重试机制的结合,能够在保证系统可用性的同时,尽可能确保数据一致性。在实际项目中,可根据业务需求调整重试次数、间隔时间等参数,以达到最佳效果。

JEECG-Boot作为AI低代码平台,不仅提供了分布式事务的解决方案,还内置了AI聊天、知识库、流程编排等功能,引领「AI生成→在线配置→代码生成→手工合并」的开发模式,解决Java项目80%的重复工作,快速提高开发效率。

如果您想了解更多关于JEECG-Boot的功能,可以访问项目仓库进行学习和实践:git clone https://gitcode.com/GitHub_Trending/je/jeecg-boot

【免费下载链接】jeecg-bootAI低代码平台,支持「低代码 + 零代码」双模式:零代码 5 分钟搭建业务系统,低代码模式一键生成前后端代码。 内置AI 应用,支持AI聊天、知识库、流程编排、MCP与插件,支持各种模型。Skills能力实现:一句话画流程图、设计表单、生成系统。 引领 AI生成→在线配置→代码生成→手工合并的开发模式,解决Java项目80%的重复工作,快速提高效率,又不失灵活性。项目地址: https://gitcode.com/GitHub_Trending/je/jeecg-boot

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 10:52:27

现代C++特性速查指南:从C++11到C++23的终极学习路线

现代C特性速查指南&#xff1a;从C11到C23的终极学习路线 【免费下载链接】modern-cpp-features A cheatsheet of modern C language and library features. 项目地址: https://gitcode.com/gh_mirrors/mo/modern-cpp-features 现代C特性速查指南&#xff08;modern-cpp…

作者头像 李华
网站建设 2026/5/7 10:47:07

如何用文言编程实现数学计算:wenyan-lang数值运算的完整指南

如何用文言编程实现数学计算&#xff1a;wenyan-lang数值运算的完整指南 【免费下载链接】wenyan 文言文編程語言 A programming language for the ancient Chinese. 项目地址: https://gitcode.com/gh_mirrors/we/wenyan wenyan-lang&#xff08;文言文编程语言&#x…

作者头像 李华
网站建设 2026/5/7 10:44:28

免费开源原神工具箱:5个步骤彻底改变你的游戏体验

免费开源原神工具箱&#xff1a;5个步骤彻底改变你的游戏体验 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 &#x1f9f0; / Multifunctional Open-Source Genshin Impact Toolkit &#x1f9f0; 项目地址: https://gitcode.com/GitHub_Trending/sn/Snap.Hutao …

作者头像 李华
网站建设 2026/5/7 10:41:50

OpenClaw:本地优先AI助手网关架构与多模态自动化实践

1. 项目概述&#xff1a;OpenClaw&#xff0c;一个运行在你设备上的个人AI助手如果你和我一样&#xff0c;厌倦了每次都要打开浏览器、登录网页才能和AI对话&#xff0c;也受够了那些云端AI助手在隐私和响应速度上的不确定性&#xff0c;那么OpenClaw的出现&#xff0c;可能就是…

作者头像 李华
网站建设 2026/5/7 10:36:51

qmc-decoder终极解密指南:如何快速解锁加密音乐文件

qmc-decoder终极解密指南&#xff1a;如何快速解锁加密音乐文件 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 还在为QQ音乐下载的音频文件只能在特定播放器上播放而烦恼吗…

作者头像 李华
网站建设 2026/5/7 10:35:44

Python算法交易框架实战:从双均线策略到实盘部署

1. 项目概述&#xff1a;一个算法交易者的工具箱如果你对金融市场感兴趣&#xff0c;并且尝试过手动交易&#xff0c;那么你大概率会和我有同样的感受&#xff1a;情绪是盈利最大的敌人。看到账户浮盈时的贪婪&#xff0c;面对亏损时的恐惧&#xff0c;以及长时间盯盘带来的决策…

作者头像 李华