Java 如何知道:在Vertex中,HttpServer提供了多少请求
我用Vertx编写了一个服务器 我有大约4万用户。我可以打印每个请求,但我不知道如何知道我的服务器正在处理多少当前请求 我使用了这个类:但这不是实现它的方法 Vertx是一个很棒的工具包,但它不能显示服务器状态,真的吗 我的服务器代码: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
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实例