当前位置: 首页 > wzjs >正文

河海大学土木专业类建设网站企业推广文案范文

河海大学土木专业类建设网站,企业推广文案范文,注册安全工程师,专业做小程序公司有哪些在 MQ 消息发送与 MySQL 事务分离的场景下,可通过以下方案保障数据一致性: 一、核心原则 确保 业务操作成功 与 消息发送成功 的最终一致性,避免因网络抖动、服务宕机等异常导致以下问题: 场景1:业务操作成功但消息未…

在 MQ 消息发送与 MySQL 事务分离的场景下,可通过以下方案保障数据一致性:


一、核心原则

确保 业务操作成功消息发送成功 的最终一致性,避免因网络抖动、服务宕机等异常导致以下问题:

  • 场景1:业务操作成功但消息未发送(下游无感知)
  • 场景2:业务操作失败但消息已发送(下游误处理)

二、具体方案

1. 事务消息(RocketMQ 专有)

适用场景:强依赖 MQ 且支持事务消息的系统(如 RocketMQ)。
核心流程

  1. 发送半消息:业务操作前发送半消息(暂不可消费)。
  2. 执行本地事务:执行业务逻辑(如 MySQL 更新)。
  3. 提交/回滚
    • 若事务成功 → 提交半消息为可消费状态。
    • 若事务失败 → 回滚半消息(不投递)。
  4. 事务回查:若未收到二次确认,MQ 主动询问事务状态(兜底机制)。

代码示例(RocketMQ):

// 发送半消息
TransactionSendResult result = producer.sendMessageInTransaction(msg, null);
// 实现 LocalTransactionChecker 处理回查
@Override
public LocalTransactionState check(MessageExt msg) {return checkDBTransactionStatus(msg.getTransactionId()) ? COMMIT : ROLLBACK;
}

优点:原生支持,流程标准化。
缺点:依赖特定 MQ(如 RocketMQ),技术栈受限。


2. 本地消息表(通用方案)

适用场景:任何 MQ(如 Kafka、RabbitMQ),需业务系统额外开发。
实现步骤

  1. 同库事务:业务操作与消息记录写入同一数据库事务。
    BEGIN;
    UPDATE order SET status = 'paid' WHERE id = 1; -- 业务操作
    INSERT INTO mq_message (id, content, status) VALUES (1001, 'order_paid', 'pending'); -- 消息记录
    COMMIT;
    
  2. 异步发送:定时任务轮询 mq_message 表,发送状态为 pending 的消息。
  3. 确认与重试
    • 发送成功 → 更新消息状态为 sent
    • 发送失败 → 记录重试次数,超过阈值则标记为 dead_letter(人工介入)。

优点:与 MQ 无关,兼容性强。
缺点:需维护消息表,增加数据库压力。


3. 事务同步监听(Spring 生态)

适用场景:基于 Spring 事务管理的系统。
实现方式

@Transactional
public void processOrder(Order order) {orderDao.update(order); // 业务操作TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {@Overridepublic void afterCommit() {// 事务提交后发送消息mqService.send(order); }});
}

注意事项

  • 发送失败处理:需配合重试机制(如 @Retryable)或记录日志人工补偿。
  • 避免事务未提交提前发送:确保消息发送在 afterCommit 回调中触发。

4. 基于 Binlog 的变更捕获(CDC 方案)

适用场景:高吞吐、解耦业务与消息发送的场景(如数据同步)。
实现流程

  1. 监听数据库日志:通过工具(如 Canal、Debezium)解析 MySQL Binlog。
  2. 过滤变更事件:捕获业务表变更(如订单状态更新)。
  3. 发送 MQ 消息:将变更事件投递到 MQ。

优点:完全解耦业务代码,适合大数据量场景。
缺点:实时性略低(依赖 Binlog 解析延迟),需维护 CDC 服务。


三、最终一致性保障

无论采用何种方案,需补充以下措施:

  1. 消费者幂等:通过唯一 ID(如业务主键)去重,避免重复消费。
  2. 死信队列(DLQ):处理多次重试失败的消息,人工介入修复。
  3. 对账补偿:定时比对业务数据与消息消费状态,修复不一致。

四、方案对比

方案优点缺点适用场景
事务消息原生支持,流程标准化依赖 RocketMQ强事务需求且使用 RocketMQ
本地消息表通用性强,兼容所有 MQ需维护消息表技术栈受限或需高可靠性
事务同步监听代码侵入小,Spring 生态友好需处理发送失败补偿中小规模 Spring 项目
Binlog 变更捕获完全解耦业务实时性低,维护成本高大数据量、异步数据同步场景

总结:优先选择 本地消息表(通用性强)或 事务消息(RocketMQ 环境),结合幂等设计与重试机制,可有效解决 MQ 与数据库事务分离场景下的数据一致性问题。

在这里插入图片描述


文章转载自:

http://U4OQBt3l.tdfyj.cn
http://0sUXzQT7.tdfyj.cn
http://4kkRsrKD.tdfyj.cn
http://779CpsZ4.tdfyj.cn
http://81CgMslq.tdfyj.cn
http://kWLs87k5.tdfyj.cn
http://pn3RlJlO.tdfyj.cn
http://233hZmXa.tdfyj.cn
http://aiFwuZA3.tdfyj.cn
http://QsmbqY6d.tdfyj.cn
http://yxOP5x4v.tdfyj.cn
http://s3DntXxl.tdfyj.cn
http://c50ZKzub.tdfyj.cn
http://BoYEer0g.tdfyj.cn
http://8WMpNtEv.tdfyj.cn
http://Vg5E6tcQ.tdfyj.cn
http://3YqkyqtP.tdfyj.cn
http://52m8vsDt.tdfyj.cn
http://lsPF1oCK.tdfyj.cn
http://nzcihXGH.tdfyj.cn
http://PIxQWDmO.tdfyj.cn
http://2fuxyYAZ.tdfyj.cn
http://5b5XESsw.tdfyj.cn
http://rTcw8VXj.tdfyj.cn
http://lqdF0zTf.tdfyj.cn
http://jdKXQYP1.tdfyj.cn
http://Pff8HcOW.tdfyj.cn
http://q2Dn8wLG.tdfyj.cn
http://lNp6fcE5.tdfyj.cn
http://8zOwIHxN.tdfyj.cn
http://www.dtcms.com/wzjs/672609.html

相关文章:

  • 怎么做网站浏览量分析网站排名5118
  • 大连网站优化多少钱涂鸦智能深圳分公司
  • 展示营销类网站云端+文明实践活动
  • 水稻网站做go分析重庆网站建设总结
  • 那些网站建设的好汽车网络营销推广方案
  • 那几家是做失物招领的网站电子商务网站建设及维护
  • 建设个人银行网站免费创建社区平台
  • 网站 外包 版权企业天眼查询信息官网
  • 广州做网站新锐软件网站建设的目的
  • 一个人 建设网站他达那非片能延时多久
  • 贵州网站建设吧上海什么做网站的公司比较好
  • 访问的网站显示建设中seo短视频
  • 新手学做网站编程做微网站需要哪种公众号
  • 深圳市建设局工程交易中心网站广州网站建设泸州
  • 用dw制作一个网站做网站赚钱交税
  • 网站的页脚什么做黑镜wordpress主题破解
  • 蜘蛛爬网站wordpress 3.6.2
  • 怎么建免费网站跨境电商公司
  • 伪静态网站配置wordpress如何用js调用广告单页做淘宝客
  • 犀牛云做网站骗人网站及其建设的心得体会
  • 网站开发哪种语言比较好网络科技公司经营范围参考
  • 网站建设推广重要性云南省网站建设收费调查报告
  • 网站建设项目实践报告书网站收录是怎么回事
  • 免费静态网站模板如何给网站挂黑链
  • 清河做网站哪里好手机端app开发公司
  • 网站建设相关语言西安是哪个省哪个市
  • 中国城乡建设部网站证书查询wordpress4.7源码下载
  • 山西省建设厅网站官网html5网站模板免费下载
  • 做网站那个平台产品宣传短视频制作
  • 长沙有什么好吃的seo服务外包公司