6、spring-cloud-gateway

依赖

xml 复制代码
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
    </dependencies>

配置文件

yml 复制代码
server:
  port: 8080

spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

    gateway:
      routes:
        - id: ms1
          uri: lb://ms1
          predicates:
            - Path=/ms1/**
          filters:
            - RewritePath=/ms1/?(?<segment>.*),/$\{segment}

        - id: ms2
          uri: lb://ms2
          predicates:
            - Path=/ms2/**
          filters:
            - RewritePath=/ms2/?(?<segment>.*),/$\{segment}

        - id: ms3
          uri: lb://ms3
          predicates:
            - Path=/ms3/**
          filters:
            - RewritePath=/ms3/?(?<segment>.*),/$\{segment}

配置类

可自定义断言工厂、拦截器工厂、全局拦截器

自定义全局拦截器

java 复制代码
@Slf4j
@Component
public class MyGlobalFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse response = exchange.getResponse();
        String uri = request.getURI().toString();
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();
        log.info("请求【{}】开始,时间:{}", uri, LocalDateTime.now());
        // 放行
        Mono<Void> mono = chain
                .filter(exchange)
                .doFinally((result) -> {
                    stopWatch.stop();
                    log.info("请求【{}】结束,时间:{},耗时:{}s", uri, LocalDateTime.now(), stopWatch.getTotalTimeSeconds());
                });
        return mono;
    }

    @Override
    public int getOrder() {
        // 数字越小,优先级越高
        return 0;
    }
}
相关推荐
SimonKing8 分钟前
JDBC你肯定听过,那JDBC Loadbalance你用过么?
java·后端·架构
菲英的学习笔记10 分钟前
C++面试题集合(附答案)
java·c++·面试·职场和发展
Java技术小馆13 分钟前
Java死锁不是会让CPU爆表吗
java·面试·架构
xjm爱学习15 分钟前
easy-query JAVA下最强查询ORM没有之一的任意子查询合并革命性OLAP优化
java
无名的小码农18 分钟前
【62期获取股票数据API接口】如何用Python、Java等五种主流语言实例演示获取股票行情API接口之沪深A股派现与募资对比数据及接口API说明文档
java·开发语言·python·股票api·股票数据接口·股票数据
申城异乡人22 分钟前
【深度思考】自定义日期格式,为什么@JSONField生效,@JsonFormat不生效?
java
桦说编程27 分钟前
告别强制转换:使用设计模式实现 Guava ListenableFuture 与 TTL 优雅融合
java·后端·设计模式
珹洺39 分钟前
Jsp技术入门指南【九】详细讲解JSTL
java·linux·开发语言·前端·jsp
小智疯狂敲代码41 分钟前
Spring AOP 源码-通知链的执行与责任链模式
java·面试