自定义路由有很多网上也有很多种方式,这篇是我结合网上以及实际业务所写的自定义路由,比较简单好理解
1.nacos路由配置
spring:
cloud:
loadbalancer:
nacos:
enabled: true
gateway:
routes:
- id: consumer //id一定不能重复
uri: lb://aaa-service //路由的服务
predicates:
- Path=/market/**
- name: GreyCar //自定义路由类(这里面要注意这个名字是自定路由类的前缀,例如自定义了一个xxxxRoutePredicateFactory,这里的name应该配置成xxxx)
args:
enableGrey: true //内部静态类的属性(注:字段名要一致)
- id: consumer2
uri: lb://bbb-service
predicates:
- Path=/market/**
//注:这两个请求路径是一样的,只有当请求满足我们自定义的条件时会路由到aaa服务,其他不满足的路由到bbb服务。
//此时注意aaa服务路由配置顺序一定要在bbb服务的上面,因为springcloud路由是按顺序检测的,满足条件后就直接路由了不会再往下找了
//由于我们自定义路由是要筛选出小部分满足aaa服务路由规则的用户,但这小部分满足也同样满足bbb服务的路由规则,所以aaa服务的路由规则一定要在bbb服务路由规则上面。
2.自定义路由类实现
@Component
@Slf4j
@RefreshScope//动态刷新路由规则
public class GreyCarRoutePredicateFactory extends AbstractRoutePredicateFactory<GreyCarRoutePredicateFactory.Config> {
public GreyCarRoutePredicateFactory(){
super(Config.class);
}
@Override
public Predicate<ServerWebExchange> apply(Config config) {
return exchange -> {
if(xxx){
//自定义业务逻辑
return ture;
}else{
//自定义业务逻辑
return false;
}
};
}
public static class Config {
private boolean enableGrey;//自定义参数,要和nacos配置的属性名称一致
public boolean isEnableGrey() {
return enableGrey;
}
public void setEnableGrey(boolean enableGrey) {
this.enableGrey = enableGrey;
}
}
}
以上就可以实现自定义路由了,可用作灰度发布场景