SpringCloudGateway路由转发顺序控制;路由规则;查看所有路由规则

Posted 好大的月亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloudGateway路由转发顺序控制;路由规则;查看所有路由规则相关的知识,希望对你有一定的参考价值。

需求

路由在转发的时候难免有些条件冲突,不定义一下顺序的话可能转发到错误的服务上去,导致404.

查看所有路由规则

配置完之后访问
http://localhost:网关端口/actuator/gateway/routes
就能看到所有的路由信息了

management:
  endpoint:
    gateway:
      enabled: true
  endpoints:
    web:
      exposure:
        include: gateway

路由转发顺序控制

配置order参数控制路由之间的顺序,默认的order都是0

spring:
  cloud:
    # Spring Cloud Gateway 配置项,对应 GatewayProperties 类
    gateway:
      # 路由配置项,对应 RouteDefinition 数组
      routes: 
        # 产品模块指向本地    
        - id: xxx-xxx-xxx
          uri: http://192.168.0.239:9205
          order: -1
          predicates:
            - Header=routeenv, dev
            - Path=/product/**
          filters:
            - StripPrefix=1 

路由规则

url从注册中心获取并负载均衡

predicates指定header,使用正则匹配

filters.StripPrefix去掉路由的指定数量路径
比如
StripPrefix=1
网关转发请求 /aaa/bbb/xxx -> /bbb/xxx
StripPrefix=2
网关转发请求 /aaa/bbb/xxx -> /xxx

spring:
  cloud:
    # Spring Cloud Gateway 配置项,对应 GatewayProperties 类
    gateway:
      # 路由配置项,对应 RouteDefinition 数组
      routes: 
        # 产品模块指向本地    
        - id: xxx-xxx-xxx
          #lb代表负载均衡
          #uri: lb://cloud-product
          uri: http://192.168.0.239:9205
          order: -1
          predicates:
            - Header=routeenv, dev
            - Path=/product/**
          filters:
            - StripPrefix=1 

编码定义路由规则

有时候需要硬编码来实现路由规则
直接来个Demo

package com.xxx.xxx.xxx;

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class GatewayConfig 


    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder)
        RouteLocatorBuilder.Builder routes = builder.routes();
        routes.route("cf", r -> 
        return r
        		//控制顺序
                .order(-2)
                //匹配路径
                .path("/product/**")
                //过滤
                .filters(f -> f.stripPrefix(1))
                //转发目标服务
                .uri("http://192.168.0.239:9205");
        );
        return routes.build();
    

以上是关于SpringCloudGateway路由转发顺序控制;路由规则;查看所有路由规则的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloudGateway手动编写路由规则对请求进行转发

SpringCloudGateway手动编写路由规则对请求进行转发

SpringCloudGateway手动编写路由规则对请求进行转发

SpringCloudGateway 动态转发后端服务

Spring Cloud Gateway 整合Eureka路由转发

Spring Cloud Gateway——路由分析