构建灰度路由 + RocketMQ 消息灰度的 AI 驱动 DEMO:从 0 到 1 的最佳实践

一、说明

该工程为HTTP请求+RocketMQ的灰度路由功能演示,所有源码均有AI生成。

GitHub 地址:yangzhen/spring-demo,推荐大家点下源码,功能、测试case、脚本,非常具有欣赏性。

⏱️ 总时间:持续2 周,累计投入约 6小时。

💸 AI 工具成本:约 11 USD(VSCode + Cline + Claude)。

🧠 模式:使用 DeepSeek+ChatGPT 精炼提示词 。

二、核心组件职责

组件职责灰度实现方式
Gateway入口路由解析gray头部,路由到对应版本Consumer
Consumer业务处理根据灰度标识调用对应版本Provider
Provider数据提供多版本部署,提供不同业务逻辑
Nacos服务发现通过metadata区分服务版本
RocketMQ消息队列使用Tag机制实现消息版本隔离

三、关键功能:灰度 + RocketMQ 流程揭秘

  1. 全链路透传灰度标识:Gateway 中 GlobalFilter 捕获传入 header.gray,并递交 downstream。
  2. 灰度注册服务:consumer/provider 实例注册至 Nacos,携带 metadata.gray-version(如 gray-feat1/gray-feat2/normal)。
  3. 灰度 HTTP 路由:Consumer 发起 HTTP 请求时,根据 LoadBalancer 自动选择相应 provider。
  4. RocketMQ 消息发布:Consumer 调用 provider 时发送 MQ 消息,消息带 gray 属性。
  5. MQ 灰度消费:provider MQ listener注册时添加tag订阅,使用RocketMQ Tag机制在MQ层面实现消息路由,避免不必要的消息投递。

四、灰度路由

4.1 整体架构

在这里插入图片描述

4.2 HTTP请求灰度路由泳道

在这里插入图片描述

4.3 RocketMQ请求灰度路由泳道

五、提示词

第一轮:HTTP请求灰度路由

请根据以下需求,生成 consumer 调用 provider 的代码示例,实现基于灰度标识的动态路由:

【需求背景】
- consumer 使用 Java8 + Spring Boot 2.7.18 + Spring Cloud 2021.x + Spring Cloud LoadBalancer
- provider 注册到 Nacos,多个实例:
  - gray-feat1(metadata.gray-version=gray-feat1)
  - gray-feat2(metadata.gray-version=gray-feat2)
  - normal(metadata.gray-version=normal)

【功能要求】
1. consumer 调用 provider /provider/hello 接口
2. 使用 RestTemplate + LoadBalancer
3. 实现自定义 ServiceInstanceListSupplier,逻辑如下:
   - 读取请求 header.gray
   - 若 gray=gray-feat1 ➔ 仅调用 metadata.gray-version=gray-feat1 的 provider 实例
   - 若 gray=gray-feat2 ➔ 仅调用 metadata.gray-version=gray-feat2 的 provider 实例
   - 无 gray header ➔ 调用 metadata.gray-version=normal 的 provider 实例
   - 若 gray 指定实例不存在 ➔ fallback 到 normal

【目标】
我希望 consumer 根据 header.gray 实现真正的灰度路由,调用 provider 对应灰度版本实例,而非默认轮询所有实例。
请严格按上述结构与逻辑输出完整代码,便于我直接复制到工程验证。

第二轮:RocketMQ请求灰度路由

请帮我生成一套基于 Spring Boot 2.7.18 + Spring Cloud 2021.x + RocketMQ 的微服务 DEMO,要求如下:

1. 包含 3 个服务:gateway(Spring Cloud Gateway)、consumer、provider,全部注册到 Nacos。(已实现)
2. 请求流程:客户端 → gateway → consumer → provider。(已实现)
3. consumer 服务访问 provider 接口的同时,发送 RocketMQ 消息(含 header.gray 字段)。
4. provider 服务消费 MQ 消息时,按 gray 头部路由到灰度版本实例。
5. 每个 provider 实例配置 `spring.cloud.nacos.discovery.metadata.gray-version`。
6. 要求灰度实例严格匹配 gray-version,无匹配实例不消费。
7. 所有服务具备本地可运行配置(application.yml + RocketMQ 本地地址)。

在这里插入图片描述

第三轮:提示词纠偏

  1. 网关请求下游路由,初期为在yml提前配置,非Nacos动态注册发现
  2. consumer请求provider,初期灰度路由基于ReactorServiceInstanceLoadBalancer,生成demo一直无法跑通
  3. RocketMQ消息中间件,初期灰度路由为RocketMQ消费时候过滤
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值