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;
    }
}
相关推荐
兔兔爱学习兔兔爱学习4 小时前
Spring Al学习7:ImageModel
java·学习·spring
lang201509285 小时前
Spring远程调用与Web服务全解析
java·前端·spring
m0_564264186 小时前
IDEA DEBUG调试时如何获取 MyBatis-Plus 动态拼接的 SQL?
java·数据库·spring boot·sql·mybatis·debug·mybatis-plus
崎岖Qiu6 小时前
【设计模式笔记06】:单一职责原则
java·笔记·设计模式·单一职责原则
Hello.Reader6 小时前
Flink ExecutionConfig 实战并行度、序列化、对象重用与全局参数
java·大数据·flink
熊小猿7 小时前
在 Spring Boot 项目中使用分页插件的两种常见方式
java·spring boot·后端
paopaokaka_luck7 小时前
基于SpringBoot+Vue的助农扶贫平台(AI问答、WebSocket实时聊天、快递物流API、协同过滤算法、Echarts图形化分析、分享链接到微博)
java·vue.js·spring boot·后端·websocket·spring
老华带你飞7 小时前
机器人信息|基于Springboot的机器人门户展示系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·机器人·论文·毕设·机器人门户展示系统
notion20257 小时前
Adobe Lightroom Classic下载与安装教程(附安装包) 2025最新版详细图文安装教程
java·数据库·其他·adobe
rengang668 小时前
351-Spring AI Alibaba Dashscope 多模型示例
java·人工智能·spring·多模态·spring ai·ai应用编程