如何查找我的春季启动应用程序每秒收到多少请求?

时间:2018-01-28 02:46:46

标签: java spring spring-mvc spring-boot

我们正在使用spring boot并且使用它我们只有一个休息服务,我们从单个客户端接收请求,但是有这么多的调用,因为每12个请求中有1个失败,如何查找如何我的春季启动接收的每秒许多请求,是他们在生产中监控这个指标的任何方式吗?

有人可以帮助我们吗?

4 个答案:

答案 0 :(得分:4)

当您使用Spring Boot相关项目时,我建议使用Springs actuator包。集成此功能就像向项目添加新依赖项一样简单:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

启用此功能后,您可以访问多个新端点,例如/trace/metrics/trace/health等等。

有关详细信息,请查看官方 Spring 文档(https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html)或 Baeldung http://www.baeldung.com/spring-boot-actuators的以下博客文章。< / p>

答案 1 :(得分:2)

您可能想要使用的是DropWizard's metrics;你可以看到可以做什么here的例子,你甚至可以使用他们的servlet来监控这些指标,它会生成如下内容:

{
  "version": "3.0.0",
  "gauges": {},
  "counters": {
    "m01-counter": {
      "count": 1
    }
  },
  "histograms": {
    "m02-histogram": {
      "count": 3,
      "max": 100,
      "mean": 41.66666666666666,
      "min": 5,
      "p50": 20,
      "p75": 100,
      "p95": 100,
      "p98": 100,
      "p99": 100,
      "p999": 100,
      "stddev": 41.69998667732268
    }
  },
  "meters": {},
  "timers": {}
}

&#34;米&#34;节点甚至可以包含最后1-5-15分钟的平均通话费率。

答案 2 :(得分:1)

您可以使用 Dropwizard 指标以及 Spring AOP 来为您的REST端点创建指标。我有一个可以使用的工作库here

另请参阅我的回答here

答案 3 :(得分:0)

你有不同的方法来跟踪这个,要么使用弹簧执行器,但很多地方存在安全问题,因此你可能无法在生产中使用它,但你可以使用弹簧过滤器或拦截器,如下所示,您可以拦截请求并在处理之后,您可以检查是否有任何异常并正确处理它。

 @Configuration
 public class MyConfiguration extends WebMvcConfigurerAdapter {


@Override
public void addInterceptors (InterceptorRegistry registry) {
    registry.addInterceptor(new TestInterceptor());

}
}

您的拦截器如下所示,您可以计算用户数或检查任何异常并适当处理

public class TestInterceptor implements HandlerInterceptor  {
AtomicInteger numOfUsers = new AtomicInteger();

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    throws Exception {
     HandlerMethod handlerMethod = (HandlerMethod) handler;
     // do something



    return super.preHandle(httpServletRequest, httpServletResponse, handler);
}

 @Override
public void postHandle( HttpServletRequest request, HttpServletResponse response,
        Object handler, ModelAndView modelAndView) throws Exception {
    System.out.println("---method executed---");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
        Object handler, Exception ex) throws Exception {
    System.out.println("---Request Completed---");

    // if you have exception thrown then check it here and do something
    System.out.println(numOfUsers.getAndIncrement());

}