Java 如何知道:在Vertex中,HttpServer提供了多少请求

Java 如何知道:在Vertex中,HttpServer提供了多少请求,java,vert.x,Java,Vert.x,我用Vertx编写了一个服务器 我有大约4万用户。我可以打印每个请求,但我不知道如何知道我的服务器正在处理多少当前请求 我使用了这个类:但这不是实现它的方法 Vertx是一个很棒的工具包,但它不能显示服务器状态,真的吗 我的服务器代码: public class MyFirstVerticle extends AbstractVerticle { private HttpServer httpServer = null; @Override public void s

我用Vertx编写了一个服务器

我有大约4万用户。我可以打印每个请求,但我不知道如何知道我的服务器正在处理多少当前请求

我使用了这个类:但这不是实现它的方法

Vertx是一个很棒的工具包,但它不能显示服务器状态,真的吗

我的服务器代码:

public class MyFirstVerticle extends AbstractVerticle {

    private HttpServer httpServer = null;

    @Override
    public void start() throws Exception {
    httpServer = vertx.createHttpServer();

    httpServer.requestHandler(new Handler<HttpServerRequest>() {
        @Override
        public void handle(HttpServerRequest request) {

            String path = request.path();
            System.out.println("incoming request: [" + request.remoteAddress() + "] at " + path);
        }
    });

    httpServer.listen(9999);
    }
}
公共类MyFirstVerticle扩展了AbstractVerticle{
私有HttpServer HttpServer=null;
@凌驾
public void start()引发异常{
httpServer=vertx.createHttpServer();
requestHandler(新处理程序(){
@凌驾
公共无效句柄(HttpServerRequest){
字符串路径=request.path();
System.out.println(“传入请求:[“+request.remoteAddress()+”]位于“+path”);
}
});
httpServer.listen(9999);
}
}

Vert.x请求的寿命非常短,因此仅根据每秒的请求数进行计算并不是最佳选择。但是,为了便于讨论,您可以通过以下方式实现您想要的:

public class MyFirstVerticle  extends AbstractVerticle {

    private HttpServer httpServer = null;

    // Bad, done for the sake of simplicity
    public final static AtomicInteger counter = new AtomicInteger(0);

    @Override
    public void start() throws Exception {

        httpServer = vertx.createHttpServer();

        httpServer.requestHandler(new Handler<HttpServerRequest>() {

            public void handle(HttpServerRequest request) {

                counter.incrementAndGet();
                String path = request.path();
                System.out.println("incoming request: [" + request.remoteAddress() + "] at " + path);
                request.response().end();

                request.endHandler(new Handler<Void>() {
                    @Override
                    public void handle(Void aVoid) {
                        counter.decrementAndGet();
                    }
                });
            }
        });

        httpServer.listen(9999);
    }
}
公共类MyFirstVerticle扩展了AbstractVerticle{
私有HttpServer HttpServer=null;
//不好,为了简单而做
公共最终静态AtomicInteger计数器=新的AtomicInteger(0);
@凌驾
public void start()引发异常{
httpServer=vertx.createHttpServer();
requestHandler(新处理程序(){
公共无效句柄(HttpServerRequest){
counter.incrementAndGet();
字符串路径=request.path();
System.out.println(“传入请求:[“+request.remoteAddress()+”]位于“+path”);
request.response().end();
endHandler(新处理程序(){
@凌驾
公共无效句柄(无效避免){
counter.decrementAndGet();
}
});
}
});
httpServer.listen(9999);
}
}
然后,为了测试你自己,你可以尝试以下方法:

public class Main {

    public static void main(String[] args) {
        Vertx vertx = Vertx.vertx();

        MyFirstVerticle verticle = new MyFirstVerticle();

        vertx.deployVerticle(verticle);
        // Very bad, but our request are very short
        vertx.setPeriodic(1, new Handler<Long>() {
            @Override
            public void handle(Long aLong) {
                // Otherwise will overflow our console
                if (MyFirstVerticle.counter.intValue() > 0) {
                    System.out.println(MyFirstVerticle.counter.intValue());
                }
            }
        });
    }
}
公共类主{
公共静态void main(字符串[]args){
Vertx Vertx=Vertx.Vertx();
MyFirstVerticle verticle=新的MyFirstVerticle();
垂直体(垂直体);
//很糟糕,但我们的要求很短
setPeriodic(1,新处理程序(){
@凌驾
公共空柄(长柄){
//否则将溢出我们的控制台
if(MyFirstVerticle.counter.intValue()>0){
System.out.println(MyFirstVerticle.counter.intValue());
}
}
});
}
}
因为vert.x 3.x.x是vert.x的官方组件

我想你搜索的是:

有几种可能性可以查看指标

  • jmx
  • jmx的http网桥
  • 在我们的项目中,我们定期写入日志文件,并通过udp将其并行发送到graphite/grafana实例