如何使用dropwizard作为框架记录Restful API调用的性能结果



我按照链接第一个REST API创建一个Restful API。

我可以在点击url: http://localhost:8080/hello-world?name=XXX时查看响应。

现在我想使用完成服务测试这个API的性能,并以人类可读的格式记录每次命中的响应时间。

我怎样才能做到这一点?

这很容易做到。有两种方法:

  1. 用度量或日志自己做。在您的资源中,您可以使用创建的指标并写出您想要的任何内容,例如:

     @GET
     public String hello() {
        Timer timer = service.timer("test");
        try(Context t = timer.time()) {
            return "Hello World";
        }
    }
    

或者只是测量时间并将其记录在某处,例如:

    @GET
    public String hello() {
        long currentTimeMillis = System.currentTimeMillis();
        try {
            return "Hello World";
        } finally {
            log.info("Request took: " + (System.currentTimeMillis() - currentTimeMillis) + " ms");
        }
}
DW的替代方法是使用定时注释,如:
@GET
@Timed(name="wohoho")
public String hello() {
    return "Hello World";
}

这等于手动方法(度量的名称将是"wohoho")。

另外,您需要报告度量标准,例如:

ConsoleReporter.forRegistry(environment.metrics()).build().start(10, TimeUnit.SECONDS);

每十秒报告一次,结果如下:

-- Timers --------------------------------------------
dw.HelloResource.wohoho
             count = 9
         mean rate = 0.13 calls/second
     1-minute rate = 0.11 calls/second
     5-minute rate = 0.03 calls/second
    15-minute rate = 0.01 calls/second
               min = 0.16 milliseconds
               max = 5.41 milliseconds
              mean = 0.90 milliseconds
            stddev = 1.43 milliseconds
            median = 0.46 milliseconds
              75% <= 0.59 milliseconds
              95% <= 5.41 milliseconds
              98% <= 5.41 milliseconds
              99% <= 5.41 milliseconds
            99.9% <= 5.41 milliseconds

这就是你所要做的。

使用指标将是首选的方法,因为您可以将其提交给石墨,然后在其他事物中绘制您的性能随时间的变化。

希望有帮助,

阿图尔

通常在许多应用程序中,我们使用石墨作为度量。

在dropwizard中向graite报告

http://metrics.dropwizard.io/3.1.0/manual/graphite/