问候;
我想知道我是否创建了一个vertx httpServer并添加了一个处理程序类来处理请求。处理程序实例中的代码是在同一个线程(事件循环线程)中执行还是在一个单独的线程/线程池中异步执行,并且不会减慢HTTPServer监听新请求操作的速度?
目前,我有一个Handler实例(一个实现Handler接口的spring signelton bean)。当很多对httpserver的HTTP请求到达时,处理程序代码会缓慢处理请求(请求在请求完成很长一段时间后执行,但不会抛出vertx ThreadBlocked异常)
答案 0 :(得分:1)
简短的回答是肯定的。每个服务器Verticle都绑定到一个事件循环线程。每个处理程序都绑定到同一个线程。这很容易检查:
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
vertx.deployVerticle(new ServerVerticle());
}
public static class ServerVerticle extends AbstractVerticle {
@Override
public void start() {
Router router = Router.router(vertx);
router.get("/").handler((r) -> {
System.out.println("Handler " + Thread.currentThread().getName());
r.response().end("");
});
System.out.println("Main verticle " + Thread.currentThread().getName());
vertx.createHttpServer().requestHandler(router::accept).listen(8888);
}
}
访问服务器,您会发现您的处理程序与服务器位于同一个事件循环线程中。
如果您的工作处理程序较慢,请使用EventBus和worker Verticle:
http://vertx.io/docs/vertx-core/groovy/#worker_verticles