Nepxion Discovery Gray
(https://github.com/Nepxion/DiscoveryGray)是Nepxion Discovery的极简示例,有助于使用者快速入门,它采用配置中心配置路由规则映射在网关过滤器中植入Header信息而实现,当然也支持从界面传入Header信息,主要包括版本路由和区域路由两种。实例以Nacos为服务注册中心和配置中心,通过Gateway和Zull调用两个版本或者区域的服务,模拟灰度发布和路由功能。如果使用者需要更强大的功能,请参考https://github.com/Nepxion/Discovery
环境搭建和运行
下载代码并导入IDE
启动Nacos服务器
从https://github.com/alibaba/nacos/releases获取nacos-server-x.x.x.zip,并解压
运行bin目录下的startup命令行
启动四个实例服务和两个网关服务,如下:
类名
微服务
服务端口
版本
区域
DiscoveryGrayServiceA1.java
A1
3001
1.0
dev
DiscoveryGrayServiceA2.java
A2
3002
1.1
qa
DiscoveryGrayServiceB1.java
B1
4001
1.0
dev
DiscoveryGrayServiceB2.java
B2
4002
1.1
qa
DiscoveryGrayGateway.java
Gateway
5001
1.0
无
DiscoveryGrayZuul.java
Zuul
5002
1.0
无
验证无灰度发布和路由的调用
在浏览器中执行http://localhost:5001/discovery-gray-service-a/invoke/gateway。测试没有灰度配置的情况下,通过Spring Cloud Gateway网关的调用结果。该结果显示,在反复执行下,所有服务都会被调用到,如下:
gateway -> discovery-gray-service-a[192.168.0.107:3001][V1.0][Region=dev] -> discovery-gray-service-b[192.168.0.107:4001][V1.0][Region=qa]
-
zuul -> discovery-gray-service-a[192.168.0.107:3001][V1.0][Region=dev] -> discovery-gray-service-b[192.168.0.107:4001][V1.0][Region=qa]
配置灰度发布和路由规则
在Nacos配置中心,增加灰度规则
增加Zuul的灰度规则,Group为discovery-gray-group,Data Id为discovery-gray-zuul,内容如下:
dev
该配置实现从Zuul发起的调用都走区域为dev的服务
注意下面两个配置。当所有服务都选dev区域的时候,可以简化成上面一条
<region>dev</region><region>{"discovery-gray-service-a":"dev", "discovery-gray-service-b":"dev"}</region>
增加Spring Cloud Gateway的灰度规则,Group为discovery-gray-group,Data Id为discovery-gray-gateway,内容如下:
1.0
该配置实现从Spring Cloud Gateway发起的调用都走版本为1.0的服务
注意下面两个配置。当所有服务都选1.0版本的时候,可以简化成上面一条
<version>1.0</version><version>{"discovery-gray-service-a":"1.0", "discovery-gray-service-b":"1.0"}</version>
验证灰度发布和路由调用
重复上述浏览器的调用,验证存在灰度发布和路由下的调用。结果显示,在反复执行下,只会调用到符合灰度规则的服务,请仔细观察
除了上面通过配置中心发布灰度规则外,还有如下两种方式:
通过前端传入灰度发布和路由规则(可选)
通过前端(Postman)方式传入灰度路由规则,来代替配置中心方式。注意:当配置中心和界面都配置后,以界面传入优先
区域规则,Header格式如下任选一个:
n-d-region=devn-d-region={"discovery-gray-service-a":"dev", "discovery-gray-service-b":"dev"}
版本规则,Header格式如下任选一个:
n-d-version=1.0n-d-version={"discovery-gray-service-a":"1.0", "discovery-gray-service-b":"1.0"}
通过自定义网关Filter设置灰度发布和路由规则(可选)
在示例中,Spring Cloud Gateway和Zuul中的Filter自定义规则,就不展开阐述了
本文分享自微信公众号 - Nepxion开源社区(iMicroService)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。