gateway 分发时若两个服务的路由地址一样,怎么指定访问想要的服务下的地址

1.思路

在使用Spring Cloud Gateway时,如果两个服务的路由地址相同,可以通过Predicate(断言)和Filter(过滤器)的组合来实现根据请求的不同条件将请求分发到不同的服务下的地址。

  1. 使用Predicate进行路由条件的判断

    • 在定义路由时,可以使用不同的Predicate来区分相同路由地址的不同服务。例如,可以根据请求的Header、参数或者路径来区分请求应该被路由到哪个服务。
  2. 使用Filter对请求进行重定向

    • 通过自定义Filter,可以根据请求的条件对请求进行重定向到不同的服务地址。在Filter中可以获取到请求的信息,并根据需要修改路由的目标地址。

2.在你的路由配置类中根据请求头跳转到不同的服务上

复制代码
@Configuration
public class CustomRouteConfig {
//service1_route 是路由id,
//lb://service1 中的 service1服务名

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("service1_route", r -> r.path("/api/**")
                        .and().header("serviceName", "service1")
                        //.filters(f -> f.rewritePath("/api/(?<segment>.*)", "/${segment}"))
                        .uri("lb://service1")
                )
                .route("service2_route", r -> r.path("/api/**")
                        .and().header("serviceName", "service2")
                       // .filters(f -> f.rewritePath("/api/(?<segment>.*)", "/${segment}"))
                        .uri("lb://service2")
                )
                .build();
    }
}

在上面的例子中,我们定义了两个路由,它们的路径都是"/api/**",但是通过Predicate中的Header条件来区分应该路由到哪个服务。当请求的Header中包含"X-Service"并且值为"service1"时,请求将被路由到service1服务;当值为"service2"时,则被路由到service2服务。

3.vue前端:在全局的api方法中增加配置的服务名

#对接后台服务名

VITE_MY_SERVICE_NAME=service1

复制代码
//动态配置请求头,找到对应的服务
const glob = useGlobSetting();
let serviceName= glob.myServiceName;
let MyHeaders={
  'serviceName': serviceName
};
if(config.headers==undefined){
  config.headers=MyHeaders;
}else{
  config.headers.serviceName = serviceName
}
相关推荐
研究司马懿17 小时前
【云原生】Gateway API高级功能
云原生·go·gateway·k8s·gateway api
Java后端的Ai之路2 天前
【Spring全家桶】-一文弄懂Spring Cloud Gateway
java·后端·spring cloud·gateway
研究司马懿6 天前
【云原生】Gateway API介绍
云原生·gateway
研究司马懿6 天前
【云原生】Gateway API路由、重定向、修饰符等关键操作
云原生·gateway
研究司马懿6 天前
【云原生】初识Gateway API
云原生·gateway
七夜zippoe7 天前
API网关设计模式实战 Spring Cloud Gateway路由过滤限流深度解析
java·设计模式·gateway·路由·api网关
汪碧康7 天前
一文讲解kubernetes的gateway Api的功能、架构、部署、管理及使用
云原生·容器·架构·kubernetes·gateway·kubelet·xkube
大佐不会说日语~7 天前
Docker Compose 部署 Spring Boot 应用 502 Bad Gateway 问题排查与解决
spring boot·docker·gateway·maven·故障排查
Dontla9 天前
Kubernetes流量管理双雄:Ingress与Gateway API解析(Nginx与Ingress与Gateway API的关系)
nginx·kubernetes·gateway
JavaLearnerZGQ9 天前
Gateway网关将登录用户信息传递给下游微服务(完整实现方案)
微服务·架构·gateway