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

网站建设方案书 doc济南做seo排名

网站建设方案书 doc,济南做seo排名,做一个个人主页的网站怎么做,赞皇建站建设Seata 与消息队列(如 RocketMQ)结合实现最终一致性,通常采用 “本地事务消息表 异步通知” 的混合模式,核心思路是通过 Seata 保障核心业务事务的原子性,利用消息队列实现跨服务异步解耦。以下是完整实现方案&#xf…

Seata 与消息队列(如 RocketMQ)结合实现最终一致性,通常采用 “本地事务消息表 + 异步通知” 的混合模式,核心思路是通过 Seata 保障核心业务事务的原子性,利用消息队列实现跨服务异步解耦。以下是完整实现方案:


架构设计原理

1. 开启Seata全局事务
2. 执行业务SQL
3. 写本地消息表
4. 提交Seata事务
5. 轮询消息表
6. 发送事务消息
7. 消费消息
8. 执行业务
协调
协调
服务A
Seata TC
业务DB
消息中继
RocketMQ
服务B
下游DB

七步实现最终一致性

步骤1:业务服务A(发起方)
  1. 开启Seata全局事务
    @GlobalTransactional 注解开启分布式事务
  2. 执行业务SQL
    更新本地业务数据库(如订单状态)
  3. 写入本地消息表
    在同一个本地事务中写入消息记录(保证原子性)
    INSERT INTO local_message (id, biz_id, mq_topic, mq_body, status) 
    VALUES ('msg001', 'order123', 'INVENTORY_TOPIC', '{"productId":100,"delta":-1}', 'UNSENT');
    
步骤2:Seata事务提交
  1. Seata提交全局事务
    • TC 协调所有分支事务(包括本地消息表写入)
    • 若全部成功:全局事务提交
    • 任一失败:全局事务回滚(自动清理本地消息表)
步骤3:消息中继服务
  1. 轮询本地消息表
    定时扫描 status='UNSENT' 的消息
  2. 发送RocketMQ事务消息
    TransactionSendResult result = producer.sendMessageInTransaction(new Message("INVENTORY_TOPIC", message.getBody()), localMessage.getId() // 事务ID
    );
    
  3. 更新消息状态
    消息发送成功后更新状态为 SENT
步骤4:下游服务B
  1. 监听并消费消息
    @RocketMQMessageListener(topic = "INVENTORY_TOPIC", consumerGroup = "inventory-group")
    public void deductInventory(Message msg) {// 解析消息体InventoryDTO dto = JSON.parse(msg.getBody());// 执行库存扣减(可嵌套Seata事务)inventoryService.deduct(dto.getProductId(), dto.getDelta());
    }
    
  2. 保证消费幂等性
    通过唯一业务ID(如订单号)避免重复处理

关键技术保障

1. 消息可靠性机制
环节保障措施
消息生产不丢失Seata事务保证消息写入本地表与业务操作原子性
消息投递不丢失RocketMQ事务消息(半消息机制)+ 中继服务重试(3次以上)
消息消费不丢失RocketMQ ACK机制 + 消费者重试队列
防消息堆积动态调整消费者并发数 + 死信队列监控
2. 最终一致性兜底方案
  • 消息状态校对
    独立定时任务扫描本地消息表:

    SELECT * FROM local_message 
    WHERE status = 'UNSENT' AND created_time < NOW() - INTERVAL '5 MINUTE';
    
    • 对未发送消息重新投递
    • 对已发送未ACK消息人工介入
  • 业务对账补偿
    日终对账服务检查业务状态一致性:

    # 伪代码示例
    for order in unpaid_orders:if inventory_reserved(order.product_id): trigger_compensation(order)  # 触发库存释放
    

Seata与RocketMQ的深度集成优化

方案1:Seata-RocketMQ Connector
// 自动将Seata事务与RocketMQ事务绑定
@GlobalTransactional
public void createOrder(Order order) {orderDAO.insert(order);// 自动发送事务消息(无需手动写消息表)rocketMQTemplate.sendInTransaction("INVENTORY_TOPIC", MessageBuilder.withPayload(order).build());
}

实现原理
通过 Seata RMHandler 拦截器,在分支事务注册时同步注册 RocketMQ 事务

方案2:基于CDC的消息发布
解析binlog
业务DB
Debezium CDC
Kafka
Stream Processing
RocketMQ
  • 优势:业务零侵入,数据库变更自动触发消息
  • 挑战:需要解决消息顺序性和重复消费

对比传统方案

方案一致性保障性能复杂度适用场景
Seata+本地消息表⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️通用场景
纯MQ事务消息⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️简单跨服务事务
TCC模式⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️强一致性金融场景
Saga模式⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️长事务+高并发

生产实践建议

  1. 消息表设计优化

    CREATE TABLE local_message (id BIGINT PRIMARY KEY,biz_id VARCHAR(64) NOT NULL,     -- 业务唯一IDmq_topic VARCHAR(64) NOT NULL,mq_body JSON NOT NULL,status ENUM('UNSENT','SENT','FAILED') NOT NULL,created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,sent_time TIMESTAMP,INDEX idx_status (status),        -- 状态索引加速扫描INDEX idx_created (created_time)  -- 时间索引用于清理
    );
    
  2. 中继服务关键配置

    # RocketMQ生产者
    rocketmq:producer:group: seata-relay-groupretryTimesWhenSendFailed: 5sendMsgTimeout: 3000# 消息扫描策略
    relay:scan-interval: 5000     # 5秒扫描一次batch-size: 200         # 每次最大处理量max-retry: 10           # 最大重试次数
    
  3. 监控指标

    • 关键指标
      seata_transaction_success_rate
      mq_message_delay_seconds
      compensation_trigger_count
    • 报警规则
      消息积压 > 1000条
      最终一致性延迟 > 1小时

典型应用场景

电商下单流程
  1. 订单服务:创建订单(Seata事务)
  2. 本地消息表:记录库存扣减消息
  3. 库存服务:异步扣减库存
  4. 若库存不足:触发补偿流程(生成退款单)
银行转账场景
账户A服务 RocketMQ 账户B服务 Seata 开启Seata事务 扣减A账户余额 写入转账消息表 提交全局事务 中继服务投递消息 消费转账消息 增加B账户余额 消费ACK 账户A服务 RocketMQ 账户B服务 Seata

总结:技术选择建议

  1. 强一致性场景
    直接使用 Seata AT/TCC 模式 + 跨服务调用
  2. 最终一致性场景
    Seata+本地消息表+RocketMQ 是黄金组合:
    • ✅ 利用 Seata 保障核心事务原子性
    • ✅ 通过本地消息表实现可靠事件
    • ✅ 依赖 RocketMQ 保证消息可靠投递
    • ✅ 消费者幂等设计解决重复消费

这种架构平衡了数据一致性与系统性能,是分布式系统中应用最广泛的最终一致性实现范式。

http://www.yayakq.cn/news/6474/

相关文章:

  • 门户型网站有哪些wordpress+电脑微信登陆
  • 网站开发代码实例网站开发的好处和弊端
  • 阿里巴巴做网站联系人怎么做网络推广公司
  • 深圳做网站的公司的区域郑州人流医院哪家好
  • 有公众号要不要做网站网站的服务有哪些
  • 备案 通过后 网站打不开网站开发都是使用框架吗
  • 网站icp做年检南宁seo网站建设
  • 微餐饮建站费用义乌网站建设技术托管
  • 网站建设公司如何挖掘客户网络营销师在哪里报名考试
  • 做淘宝客网站哪个好用科技自立自强是国家强盛之基
  • 深圳网站制作电话建筑培训中心
  • 做网站的前端是做什么网站购物车建设
  • 昆明云南微网站搭建哪家好seo站长工具箱
  • 网站模板凡平台物流托运
  • 信誉楼线上商城小程序网站的内部优化
  • 广州找公司建网站nike diy定制网站
  • 优质做网站哪家好WordPress访问者ip
  • 静态网站 源码网站建设费记到什么科目
  • 公司做网站的钱网银转账用途大兴安岭网站建设
  • 建设企业官方网站公司网站设计素材
  • 建网站哪个好 优帮云asp图片网站源码
  • 东莞网站制作电话支付宝网页版登录入口
  • 自己做游戏app的网站哪个网站教做饭做的好
  • 中国风格网站020网站系统
  • 江苏城乡建设部网站首页外国人注册公司需要什么条件
  • 数据上传网站广州网站建设公司有哪些
  • 网站建设业务员怎么做浙江省最新拟提任省管干部
  • 烟台网站建设 58李沧做网站
  • 在免费空间上传网站为什么访问不了wordpress 文章评论数
  • 什么网站开发客户福建省网站备案用户注销