[m] Spring Cloud gateway 2 : 配置文件、Java代码Path断言两种方式实现URL映射

两种方式实现 Url映射

第一种:配置文件形式

匹配的路径是 /pro 。就会映射到 EUREKA-CLIENT 服务,并自动做负载均衡

# 路由id
spring.cloud.gateway.routes-id=eurekaClient
# 路由匹配成功,要转发到哪里:转发到eureka-client服务
spring.cloud.gateway.routes[0].uri=lb://EUREKA-CLIENT
spring.cloud.gateway.routes[0].predicates[0]=Path=/pro/**
spring.cloud.gateway.routes[0].filters[0]=StripPrefix=1


yml格式如下
spring:
  application:
    name: gateway-service
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
          lower-case-service-id: true
      routes:
      - id: eurekaClient
        uri: lb://EUREKA-CLIENT
        predicates:
        - Path=/pro/**
        filters:
        - StripPrefix=1

访问接口地址 : http://localhost:65000/pro/hi 可以看到实现了Url的映射,并自动实现负载均衡

第二种格式:Java代码配置

@Configuration
public class GatewayConfiguration {

    @Bean
    @Order
    public RouteLocator cunstomRoutes(RouteLocatorBuilder builder){
        return builder.routes().route(r -> r.path("/java/**")
                        .and().method(HttpMethod.GET)
                        .and().header("token")  // 请求header里必须有指定的值 token
                .filters(f -> f.stripPrefix(1)
                        .addResponseHeader("java-gateway-param","1122334")//给响应头加个参数
                )
                .uri("lb://EUREKA-CLIENT")
                ).build();
    }


}

在代码中限制了请求中必须带有请求头,

 在返回的 response 中,也看到了返回的数据

配置多个路由规则

需要配置多个路由规则,只需要配置多个 .route

 

public class GatewayConfiguration {


    @Bean
    @Order
    public RouteLocator cunstomRoutes(RouteLocatorBuilder builder){
        return builder.routes().
                route(r -> r.path("/java/**")
                        .and().method(HttpMethod.GET)
                        .and().header("token")  // 请求header里必须有指定的值 token
                        .filters(f -> f.stripPrefix(1) //过滤第一个路径
                                .filter(eurekaClientGatewayFilter)
                        .addResponseHeader("java-gateway-param","1122334") //给响应头加个参数
                        )
                        .uri("lb://EUREKA-CLIENT"))
                .route(r -> r.path("/seckill/**").and()  // 这里又是一个新的 Url 路由
                    .after(ZonedDateTime.now().plusMinutes(1)).  // after 在xx时间之后生效。ZonedDateTime.now() 当前时间 .plusMinutes(1) 延后一分钟
//                    .before()  在 xx 时间点之前才有效,之后就没效果了
                    uri("lb://EUREKA-CLIENT")).build();
    }


}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值