当前位置: 首页 > article >正文

微服务--Gateway--局部过滤器接口耗时【重要】

局部过滤器 GateWayFilter ,

通过***GateWayFilterFactory

-> 然后只需配置spring.cloud.gateway.routes[1].filters[1] = LogTime=gte,1000 【1000 单位指的是 毫秒】

1.找规律

局部过滤器命名规则 : ***GateWayFilterFactory 必须以GateWayFilterFactory结尾

/*  注意名称约定
*   AddRequestHeaderGatewayFilterFactory    配置的时候写的是 AddRequestHeader
*   AddRequestParameterGatewayFilterFactory 配置的时候写的是 AddRequestParameter
*   LogTimeGatewayFilterFactory   配置的时候 只需要配置 LogTime  即可
* */

spring.cloud.gateway.routes[0].filters[0] = LogTime=gte,500

2.接口耗时过滤器

package com.***.filter;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.factory.AbstractNameValueGatewayFilterFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@Slf4j
@Component
public class LogTimeGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory {

    private static long timeSpan = 0;
    @Override
    public GatewayFilter apply(NameValueConfig config) {
        String timeSpanStr = config.getValue();
        timeSpan = Long.valueOf(timeSpanStr);
        return new GatewayFilter() {
            @Override
            public Mono<Void> filter(ServerWebExchange exchange,  GatewayFilterChain chain) {

                long startTime = System.currentTimeMillis();
                return chain.filter(exchange).then(Mono.fromRunnable(()->{
                    long endTime = System.currentTimeMillis();
                    // 耗时时间
                    long time =  endTime-startTime;
                    if(time >= timeSpan){
                        log.debug("{} 耗时:{}",exchange.getRequest().getURI(), time);
                    }
                }));

            }
        };
    }
}

3.使用:在配置文件中 添加配置即可


http://www.kler.cn/news/357143.html

相关文章:

  • 机器学习课程学习周报十七
  • VSCode自搭建嵌入式环境的make构建工具选择
  • snmpdelta使用说明
  • 【ELK】初始阶段
  • 【Petri网导论学习笔记】Petri网导论入门学习(五)—— 1.3 库所/变迁系统与加权Petri网
  • Chrome谷歌浏览器加载ActiveX控件之JT2Go控件
  • 高效部署大型语言模型:基于AMD GPU的文本生成推理
  • 低代码平台中的功能驱动开发:模块化与领域设计
  • 【 Git 】git push 报错 error: failed to push some refs to ‘github.com/xxxx‘
  • git 与github 远程连接出现中文用户名乱码导致无法找到user/.ssh文件的解决办法
  • 桥接模式、NAT模式 和 主机模式(Host-Only)区别
  • 鸿蒙网络编程系列27-HTTPS服务端证书的四种校验方式示例
  • 【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第五十章 Linux设备树
  • 申请软件测试CNAS实验室认证人员方面要做好哪些准备?
  • 若依框架中根目录与子模块 `pom.xml` 的区别
  • c4d哪个渲染器好用简单?c4d常用渲染器介绍
  • Spring篇(事务篇 - 基础介绍)
  • 【Python】基础语法
  • 计算机毕业设计 基于Python的汽车销售管理系统的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】
  • 深入了解机器学习 (Descending into ML):线性回归