HZERO微服务平台05: 利用灰度发布在本机快速开发调试

目录

背景

目前微服务体系下请求的过程:

web -> gateway -> 业务服务(实例1、实例2...)

从浏览器发出的请求通过网关转发到业务服务, 当业务服务有多个实例时, 网关会随机(或轮询等策略)转发到某个服务实例;
当线上和本地各有一个实例时, 前端发出的请求会在本地和线上随机发送, 既影响线上用户使用, 也影响开发人员调试;
所以本地启动服务实例时, 通常需要修改服务名, 用swagger或postman调试, 不能通过前端页面来调试.

我们希望实现的效果: 本地服务不修改服务名, 从开发人员浏览器发出的请求只会被转发到开发人员本机的实例, 线上其他用户发出的请求正常请求到线上的服务, 开发调试和正常使用都不影响;

灰度发布概念:
灰度发布_百度百科

操作步骤

总体思路: 给后端服务和前端请求加上标签, 网关通过标签选择实例;

后端服务增加元数据

本地服务不需要修改服务名, 增加metadata配置:

spring:
  cloud:
    nacos:
      discovery:
        metadata:
          GROUP: QXX

其中GROUP是固定key, 必须大写; QXX是自定义的名称; 服务启动后可以在nacos里看到:
HZERO微服务平台05: 利用灰度发布在本机快速开发调试

也可以通过环境变量配置:

SPRING_APPLICATION_JSON={"spring.cloud.nacos.discovery.metadata.GROUP": "QXX"}

下面配置是无效的, 因为"GROUP"会被转换成小写:

SPRING_CLOUD_NACOS_DISCOVERY_METADATA_GROUP: QXX

用浏览器插件给前端请求添加header

浏览器安装插件, 给所有请求自动添加header, 以ModHeader插件为例:
HZERO微服务平台05: 利用灰度发布在本机快速开发调试

其中的X-Eureka-Label是固定的header名, 大小写任意; QXX和服务端定义的元数据相对应.
此时浏览器发出的请求都会被带上X-Eureka-Label的header;

HZERO微服务平台05: 利用灰度发布在本机快速开发调试

验证效果

打开前端, 本地发出的请求会全部转发到本地服务; 关闭ModHeader插件, 会转发到线上服务;

上一篇:ES6 05函数的参数


下一篇:狂神说-Docker基础-学习笔记-05 Docker镜像原理