跳转至

异步化 RabbitMQ

目标:通过消息化解耦请求与执行,异步下发任务
- 客户端下发 → 网关 → Producer 落库与投递(publisher confirm)→ 立即返回 202 与任务查询地址;
- Consumer 手动 ack、幂等保证(Redis SETNX);失败进入 retry(q.1m/q.5m/q.30m)用尽后流向 DLQ
- 所有环节注入 traceId,打通 APM/Log/Metrics


1.队列监控 & 异步化架构

1.1 队列监控(Queue)

RabbitMQ 队列监控

  • 关注:ready / unacked / total、绑定关系(routing key / exchange)、DLX/DLQ 配置等。
  • 网关侧可设队列深度阈值429 Guard(保护入口)。

1.2 异步化架构(Architecture)

异步化架构图(任务下发/重试/回流)

  • Producer:publisher confirms 成功后返回 202;写 Redis 记录 status/progress/result(附 TTL)。
  • Exchange/Queue:topic 交换机;robot.task.q 工作队列,robot.retry 多级重试,最终流向 DLQ
  • Consumer:prefetch = Nmanual ack;成功 ack,失败 publish 到 robot.retry

2.接入设计与关键参数

  • publisher-confirm-type: correlated & publisher-returns: truemandatory: true 保障 return 可见
  • 并发concurrency=2max-concurrency=8prefetch=20(总 in-flight≈40);
  • TTLmessage-ttl=3600s任务结果 TTL 可 24h;
  • 异常不重回default-requeue-rejected: false,避免“鬼畜”重试。

3.消费与错误处理

  • 失败处理:先路由到 robot.retry(q.1m → q.5m → q.30m),重试用尽 → robot.task.dlq
  • 幂等:Redis SETNX(taskId)确保 Consumer 端一次且仅一次的业务执行;
  • 可观测性:打通链路,traceId 贯穿 网关 / Producer / RabbitMQ / Consumer,排障快。

4.联调结果(Postman)

  • 创建任务:返回 202 Accepted + statusUrl
  • 查询任务:按 taskId 查 Redis(或 DB),返回 PENDING / RUNNING / SUCCESS / FAIL
  • Header 注入 X-Request-Id 便于与日志/Trace 对齐。