跳到主要内容

路由参数详细讲解

不同维度的详细解释

区域:

  • 使用不同区域:例如多机房的情况下,来区分出不同机房下的服务,可以通过不同的区域来匹配到蓝绿发布。
  • 降级区域:如果服务路由过程中没有找到相应区域的服务实例,会路由到配置的降级区域来做兜底。

组:

  • 使用不同组:来实现对服务进行逻辑上的分组,主要作用在同一个区域下的不同组的服务之间实现路由隔离。
  • 不支持降级组的策略。

版本

  • 通过不同版本:来匹配到蓝绿发布。
  • 降级版本:如果服务路由过程中没有找到相应版本的服务实例,会路由到配置的降级版本来做兜底。
  • 版本权重:可以通过配置不同版本的调用权重,来匹配到灰度发布。

区域

区域的概念是指在相同区域下服务之间才可以调用到

在配置中指定开启或关闭(默认关闭状态)

spring:
application:
link-flow:
work:
# 区域规则隔离开关
zone:
activate: true

具体服务自己的区域值通过在项目的配置文件中指定

spring:
cloud:
link-flow:
metadata:
zone: test-zone-1

在项目启动后,就会自动将区域放置在服务中的元数据中



流程图:



降级兜底区域

可以开启降级兜底区域功能,当服务调用过滤时,发现要调用的服务没有和自己相同的区域,那么就可以去调用指定的区域,这个指定的区域就是降级区域,相当于做最后的兜底。

在配置中指定开启或关闭(默认关闭状态)

spring:
application:
link-flow:
work:
# 区域故障兜底开关
downgrades-zone:
activate: true

兜底区域配置

兜底区域可以在请求头或者配置中心来指定

请求头方式

  1. 所有服务可以调用的兜底策略都是 test-zone-2 区域
link-flow-downgrades-zone = {"generalDowngradesZoneRule":"test-zone-2"}
  1. 兜底策略功能调用 test-zone-1 区域的a服务,调用 test-zone-2 区域的b服务
link-flow-downgrades-zone={
"definiteDowngradesZoneRuleList":[
{"serverName":"a-service","value":"test-zone-1"},
{"serverName":"b-service","value":"test-zone-2"}
]
}

配置中心方式

  1. 所有服务可以调用的兜底策略都是 test-zone-2 区域
{"generalDowngradesZoneRule":"test-zone-2"}
  1. 兜底策略功能调用 test-zone-1 区域的a服务,调用 test-zone-2 区域的b服务
{
"definiteDowngradesZoneRuleList":[
{"serverName":"a-service","value":"test-zone-1"},
{"serverName":"b-service","value":"test-zone-2"}
]
}

流程图

组的概念是指相同组下服务之间才可以调用

在配置中指定开启或关闭(默认关闭状态)

spring:
application:
link-flow:
work:
# 组规则隔离的开关
group:
activate: true

具体服务自己的区域值通过在项目的配置文件中指定

spring:
cloud:
link-flow:
metadata:
group: test-group

在项目启动后,就会自动将组放置在服务中的元数据中

流程图:

版本

版本的概念是指在相同版本下服务之间才可以调用到

在配置中指定开启或关闭(默认关闭状态)

spring:
application:
link-flow:
work:
# 版本规则隔离的开关
version:
activate: true

具体服务自己的版本值通过在项目的配置文件中指定

spring:
cloud:
link-flow:
metadata:
version: 1.0

在项目启动后,就会自动将区域放置在服务中的元数据中

流程图:

降级兜底版本

可以开启降级兜底版本功能,当服务调用过滤时,发现要调用的服务没有和自己相同的版本,那么就可以去调用指定的版本,这个指定的版本就是降级版本,相当于做最后的兜底。

在配置中指定开启或关闭(默认关闭状态)

spring:
application:
link-flow:
work:
# 区域故障兜底开关
downgrades-version:
activate: true

兜底版本配置

兜底版本可以在请求头或者配置中心来指定

请求头方式

  1. 所有服务可以调用的兜底策略都是 version-3 版本
link-flow-downgrades-version = {"generalDowngradesVersionRule":"3"}
  1. 兜底策略功能调用 version-3 版本的a服务,调用 version-4 版本的b服务
link-flow-downgrades-version={
"definiteDowngradesVersionRuleList":[
{"serverName":"a-service","value":"3"},
{"serverName":"b-service","value":"4"}
]
}

配置中心方式

  1. 所有服务可以调用的兜底策略都是 version-3 版本
{"generalDowngradesVersionRule":"3"}
  1. 兜底策略功能调用 version-3 版本的a服务,调用 version-4 版本的b服务
{
"definiteDowngradesVersionRuleList":[
{"serverName":"a-service","value":"3"},
{"serverName":"b-service","value":"4"}
]
}

流程图

版本权重

版本权重的概念是指服务之间调用时,可以指定不同版本的权重调用概率。比如:

有个业务是user服务

  • user1的服务实例版本为 version-1,服务器配置非常的高,那么权重可以设值为90
  • user2的服务实例版本为 version-2,服务器配置非常的低,那么权重可以设置为10

这样user1的服务实例被调用到的概率是90%,user2的服务实例被调用到的概率是10%

版本权重并没有主动设置开关,只要配置了权重信息就会启动权重策略,没有配置的话就不执行权重策略

版本权重配置

版本权重可以在请求头或者配置中心来指定

请求头方式

  1. 所有服务统一设置为 version-1 版本的服务权重为90,version-2 版本的服务权重为10
link-flow-version-weight={"generalVersionWeightRule":"1=90;2=10"}
  1. 在a服务中,version-1 版本的a服务权重为90,version-2 版本的a服务权重为10

在b服务中,version-1 版本的b服务权重为70,version-2 版本的b服务权重为30

link-flow-version-weight={
"definiteVersionWeightRuleList":[
{"serverName":"a-service","value":"1=90;2=10"},
{"serverName":"b-service","value":"1=70;2=30"}
]
}

配置中心方式

  1. 所有服务统一设置为 version-1 版本的服务权重为90,version-2 版本的服务权重为10
{"generalVersionWeightRule":"1=90;2=10"}
  1. 在a服务中,version-1 版本的a服务权重为90,version-2 版本的a服务权重为10

在b服务中,version-1 版本的b服务权重为70,version-2 版本的b服务权重为30

{
"definiteVersionWeightRuleList":[
{"serverName":"a-service","value":"1=90;2=10"},
{"serverName":"b-service","value":"1=70;2=30"}
]
}

流程图