Skip to content

如何执行区域调试路由

HaojunRen edited this page Oct 15, 2024 · 3 revisions

本文档只适用于Discovery 6.15.0及以上版本的集成方式

在区域调试路由执行的时候,当未对服务指定访问区域的时候,路由到事先指定的区域。该功能属于静态隔离和动态路由结合在一起的灵活方案,适用于开发环境(个人电脑环境)在测试环境(线上环境)进行联调,同时当多套个人环境接入时候,可以保护不同的个人环境间不会彼此调用

策略

在下面的全链路调用路径中

A服务 -> B服务 -> C服务 -> D服务

其中,A服务和B服务在开发环境上,C服务和D服务在测试环境上,希望A服务调用B服务的时候,只会走本地电脑,不会去访问测试环境的B服务,也不会去访问其它本地电脑的B服务;B服务调用C服务的时候,只会去访问测试环境的C服务,C服务调用D服务的时候,也只是在测试环境的区域内

服务实例的元数据设置如下:

① A服务和B服务的区域(Region)元数据配置为MyDEV(本地电脑的名称或者可以区别其它电脑的特征值),如下

spring.cloud.discovery.metadata.region=MyDEV

② C服务和D服务的区域(Region)元数据配置为FAT(测试环境),如下

spring.cloud.discovery.metadata.region=FAT

只需要通过如下步骤:

① 打开启动和关闭区域调试转移开关

# 启动和关闭区域调试转移。缺失则默认为false
spring.application.strategy.region.transfer.enabled=true

② 设置区域调试转移值

<?xml version="1.0" encoding="UTF-8"?>
<rule>
    <strategy-failover>
        <!-- 区域调试转移,跨区调试路由到指定区域的实例 -->
        <region-transfer>FAT</region-transfer> 
    </strategy-failover>
</rule>

通过在配置中心修改版本偏好值,可以达到动态区域调试路由的效果

或者也可以通过前端传入区域调试转移Header

n-d-region-transfer=FAT

③ 前端传入B服务的区域Header。由于A服务是调用起点,所以不需要配置A服务的值

n-d-region={"service-b":"MyDEV"}

扩展场景:

如果希望C服务访问的是开发环境上的D服务,那么变成

A服务(本地环境) -> B服务(本地环境) -> C服务(测试环境) -> D服务(本地环境)

前端传入区域Header改为

n-d-region={"service-b":"MyDEV", "service-d":"MyDEV"}

注意事项

  • 要调用测试环境中的服务,包括开发环境调用测试环境和测试环境中的服务间调用,必须打开启动和关闭区域调试转移开关和设置区域调试转移值
  • 要调用开发环境中的服务,包括测试环境回调开发环境和开发环境中的服务间调用,必须加上n-d-region的Header进行动态路由




2017-2050 ©Nepxion Studio Apache License

           

Total visits

讲义篇

集成篇

概念篇

实践篇

功能篇

配置篇

扩展篇

测试篇

升级篇

贡献篇

Clone this wiki locally