Spring Boot基于事件实现接口请求的性能监控

开发 架构
在Spring​框架中,监控接口请求的性能可以通过ServletRequestHandledEvent事件实现。这种方法简单有效,能够帮助开发者实时跟踪和分析请求的性能。

前言

在Spring框架中,监控接口请求的性能可以通过ServletRequestHandledEvent事件实现。这种方法简单有效,能够帮助开发者实时跟踪和分析请求的性能。

它在请求处理完成后发布,包含了请求的详细信息,如客户端地址、请求URL、请求方法和处理时间。使用这个事件可以轻松地监控和记录每个请求的性能数据。

实现步骤

创建监听器类

@Component
public class TimeCountListener implements ApplicationListener<ServletRequestHandledEvent> {

  @Override
  public void onApplicationEvent(ServletRequestHandledEvent event) {
    Throwable failureCause = event.getFailureCause();
    if (failureCause != null) {
      System.err.printf("错误原因: %s%n", failureCause.getMessage());
    }
    System.err.println("========================================");
    System.err.printf("请求客户端地址:%s\n请求URL: %s\n请求Method: %s\n请求耗时: %d毫秒%n", 
        event.getClientAddress(),
        event.getRequestUrl(), 
        event.getMethod(), 
        event.getProcessingTimeMillis());
    System.err.println("========================================");
  }
}

优点:

  • 简单易用:无需对业务代码进行侵入式修改,只需创建监听器类。
  • 准确性高:Spring会在请求处理完成后发布事件,记录的时间较为准确。
  • 低侵入性:与业务逻辑代码解耦,易于维护和扩展。

缺点:

  • 性能开销:尽管开销较小,但记录和处理事件仍然会增加系统的负担。
  • 事件丢失:在高并发或系统异常情况下,事件可能会丢失或记录不全。

其他方案

自定义拦截器可以用来在请求处理的不同阶段(如请求前、请求后、请求完成后)添加额外的逻辑。

public class PerformanceInterceptor implements HandlerInterceptor {

    private static final Logger logger = LoggerFactory.getLogger(PerformanceInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        request.setAttribute("startTime", System.currentTimeMillis());
        returntrue;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        long startTime = (Long) request.getAttribute("startTime");
        long endTime = System.currentTimeMillis();
        long executeTime = endTime - startTime;
        logger.info("请求URL: {},耗时: {} ms", request.getRequestURI(), executeTime);
    }
}

责任编辑:武晓燕 来源: 一安未来
相关推荐

2022-01-05 08:29:22

监控Prometheus Post

2023-03-27 08:25:28

技巧技术吞吐率

2022-09-22 08:42:14

接口请求合并技巧

2022-02-09 20:39:52

Actuator应用监控

2024-10-18 08:00:00

SpringBoot框架开发

2022-10-26 12:43:52

SpringBootPDF

2021-03-09 13:18:53

加密解密参数

2022-06-04 12:25:10

解密加密过滤器

2023-10-30 09:46:08

接口重试技巧

2022-05-18 08:32:05

服务监控Prometheus开源

2024-08-12 12:20:49

Controller接口性能

2022-12-29 08:43:43

项目接口请求

2024-10-08 09:27:04

SpringRESTfulAPI

2022-07-11 09:36:38

SpringJava开发

2024-08-29 09:01:39

2020-07-14 16:03:41

SpringCloud架构API网关

2020-11-10 09:19:23

Spring BootJava开发

2022-11-24 08:01:24

HTTPClienIDEA

2022-10-11 14:58:00

性能优化Java

2009-08-31 18:01:41

C#接口事件
点赞
收藏

51CTO技术栈公众号