消息队列 RocketMQ 实践:千里达票务系统订单链路异步解耦

简介: 最早千里达票务系统同步调用:下单→扣库存→调支付→发短信→加积分,任何下游慢一点整个接口被拖垮。接入阿里云RocketMQ后主链路只做核心写库:OrderTopic按景区路由同队列保证局部有序,事务消息保证下单与扣库存最终一致,死信队列+消费端幂等。附生产端Java示例与踩坑复盘(消息积压、重复消费、顺序与吞吐矛盾、死信堆积)。下单接口P99从800ms降到350ms。

消息队列 RocketMQ 实践:千里达票务系统订单链路异步解耦

最早千里达票务系统是同步调用:下单 → 扣库存 → 调支付 → 发短信 → 加会员积分。任何一个下游慢一点,整个下单接口就被拖垮,节假日一次短信网关抖动,整个景区都买不了票。接入阿里云消息队列 RocketMQ 后,主链路只做核心写库,其余异步化,接口 P99 直接降了一半。

一、为什么要 MQ

  • 削峰:节假日抢票洪峰瞬间打过来,MQ 当缓冲;
  • 解耦:短信、积分、发票、通知各自订阅,新增下游不动主链路;
  • 可靠:支付回调落库后发消息,下游挂了不影响主订单;
  • 最终一致:库存扣减与订单创建通过事务消息保证一致。

二、拓扑

下单服务 → RocketMQ(OrderTopic) → 库存服务/短信服务/积分服务/数据分析
支付服务 → RocketMQ(PayTopic)   → 发票服务/短信服务/财务对账

三、关键实现

3.1 生产端(订单创建)

Message msg = new Message("OrderTopic", "TagNewOrder",
    JSON.toJSONBytes(orderDTO));
SendResult result = producer.send(msg, (mq, q, arg) -> {
   
    return mq.getQueueId() % q.getQueueNum();
}, orderDTO.getSceneId());  // 同景区订单路由到同队列,保证局部有序

3.2 消费端

consumer.subscribe("OrderTopic", "TagNewOrder", (msgs, ctx) -> {
   
    for (MessageExt m : msgs) {
   
        OrderDTO dto = JSON.parseObject(m.getBody(), OrderDTO.class);
        smsService.sendOrderNotice(dto);
    }
    return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
});

3.3 关键策略

  • 顺序消息:同景区同游客的订单按队列顺序消费;
  • 事务消息:下单与扣库存跨库,用半消息保证最终一致;
  • 死信队列:重试 16 次仍失败进死信,人工介入;
  • 幂等:消费端按 order_no 去重,避免重复发短信。

四、踩坑复盘

  1. 消息积压:国庆当天短信网关慢,积压 20 万条。解决:临时扩容消费者 + 降级非核心通知;
  2. 重复消费:网络抖动导致重复投,给用户发了两条短信。解决:消费端 Redis 去重;
  3. 顺序与吞吐矛盾:强制全局有序后吞吐上不去。解决:按景区做分区有序,不追求全局;
  4. 死信堆积没人看:早期死信告警没配,一周后才发现某类订单短信一直失败。解决:死信队列接云监控告警。

五、效果与总结

接入 RocketMQ 后,下单接口 P99 从 800ms 降到 350ms,节假日短信网关抖动再也不会拖垮主交易。对千里达票务系统这种多下游、强波峰的业务,MQ 是"主链路稳得住"的关键中间件:先把异步和同步拆开,再谈高并发。

相关文章
|
19天前
|
人工智能 Linux API
Magpie, 轻量本地AI网关!免费Token用不完!
Magpie 是开源AI编程模型调度网关,上线一月获1.8万Star。它通过本地高性能网关统一托管多平台API密钥、账号与免费额度,实现跨Agent的模型秒级切换、静默额度轮换与资源复用,显著降低碎片化管理成本。(239字)
Magpie, 轻量本地AI网关!免费Token用不完!
|
21天前
|
机器学习/深度学习 人工智能 安全
Google Research 开源 Harness²:不改模型权重,AI Agent 如何持续进化?
Harness² 是 Google Research 开源的 AI Agent 自优化框架,不改模型权重,而是通过“提出–探测–组合”机制,自动调整提示词、记忆、工具指导等8类执行组件,提升任务表现。Apache 2.0 协议,支持 OpenCode/Codex,属研究项目。
|
21天前
|
存储 弹性计算
阿里云轻量应用服务器收费价格:CPU内存 + 200M峰值带宽 + 存储费用清单,2026年最新整理
阿里云轻量应用服务器2026年最新活动:新用户专享,2核2G低至38元/年(限时秒杀),常规价68元;2核4G 379元、4核8G 1159元、4核16G 1599元/年。全系标配200Mbps峰值带宽、不限流量,覆盖杭州、北京等12个内地地域。阿里云轻量应用服务器官网:https://t.aliyun.com/U/dwftch
241 0
|
消息中间件 Java Spring
RocketMQ-JAVA客户端不同版本接入方式
RocketMQ4.0 RocketMQ5.0 JAVA接入 spring springboot
RocketMQ-JAVA客户端不同版本接入方式
|
4月前
|
文字识别 API 黑灰产治理
图像内容审核-图片鉴黄-图片审核-图片内容审核-图片违规审核-图像审核API接口介绍
这是一款智能图像审核工具,支持自动识别色情、低俗、违禁行为(如吸烟、赌博)、恐怖恶心内容及图片内嵌违规文字,兼容多种图片格式与上传方式,提供精准分级审核结果。
251 0
|
5月前
|
消息中间件 Java Serverless
阿里云云消息队列RocketMQ版配置流程完全指南
本文提供一份阿里云云消息队列RocketMQ版的完整配置流程指南。首先需开通服务并完成RAM授权,然后创建RocketMQ实例,支持包年包月、按量付费和Serverless三种计费模式,推荐选择5.0系列以享受存储计算分离架构优势。接着创建Topic并指定消息类型(普通/顺序/事务/定时),创建ConsumerGroup用于消费者分组管理,获取实例接入点(VPC内网接入或公网接入)。SDK配置方面,需根据协议选择gRPC或Remoting SDK,本文提供Java和Spring Boot两种集成方式的完整代码示例,涵盖普通消息、顺序消息和事务消息的收发实现。高级配置包括消息轨迹查询、死信消息处
|
5月前
|
消息中间件 安全 Java
阿里云云消息队列RocketMQ版完整配置流程(含代码示例)
本文详细讲解阿里云云消息队列RocketMQ版从服务开通、环境准备、实例创建、资源配置(Topic/Group)、权限管理(RAM/ACL)到Java SDK消息收发、SpringBoot整合、问题排查的全流程,提供完整代码示例与最佳实践,帮助用户快速上手并稳定使用RocketMQ服务。
|
5月前
|
存储 SQL 安全
【Java并发编程】JMM Java内存模型:原子性、可见性、有序性、happens-before原则(附《思维导图》+《面试高频考点清单》)
Java内存模型(JMM)是Java并发编程的基石,抽象定义主内存与线程工作内存的交互规则,系统解决可见性、原子性、有序性三大核心问题,并通过happens-before、volatile、synchronized等机制保障多线程安全与跨平台一致性。
|
6月前
|
关系型数据库 MySQL 测试技术
JOIN、IN、EXISTS谁最快?实测三种写法性能差异与执行计划深度剖析
本文用MySQL 8.0实测拆解`IN`/`EXISTS`/`JOIN`子查询性能:从执行计划、半连接优化、临时表开销等底层原理出发,结合10万+100万数据实测(`EXISTS`最快95ms),给出三条选型铁律——告别盲从“最佳实践”,只选最适配业务与数据的写法!
|
SQL 关系型数据库 MySQL
MySQL删除数据后磁盘空间的释放总结
MySQL删除数据后磁盘空间的释放总结
2094 0

热门文章

最新文章