一旦控制权传递给blockingHandler,vertx.eventloop线程会怎样?

问题描述

我使用vert.x作为api网关,每个请求必须经过多个处理程序 示例代码

router.route(BASE_PATH)
                .method(HttpMethod.POST)
                .handler(LoggerHandler.create(LoggerFormat.SHORT))
                .handler(BodyHandler.create())
                .blockingHandler(this::authRouter)
                .blockingHandler(this::reqValidationRouter)
                .handler(this::downStreamRouter)
                .blockingHandler(this::responseTransformRouter)

当控件传递给blockingHandler时,事件循环线程会怎样?他们会继续接受更多的请求吗?如果是,阻塞处理程序执行完成后会发生什么? 从eventLoop切换到blockingHandler(workerPool)然后再切换回eventLoop是否会对性能产生影响?

处理多个处理程序的理想方法是什么?

谢谢, Nitish Goyal

解决方法

当控件传递给blockingHandler时,事件循环线程会发生什么?他们会继续接受更多的请求吗?

是的,事件循环将把阻塞处理程序部分卸载到工作池中并处理其他事件。

如果是,当阻塞处理程序执行完成时会发生什么?

带有结果的事件将添加到事件循环队列中。

从eventLoop切换到blockingHandler(workerPool)然后再回到eventLoop会对性能产生影响吗?

线程之间的切换不是免费的,但在这种用例(api网关)的总延迟中,成本应该可以忽略不计。

处理多个处理程序的理想方法是什么?

理想情况下,您避免在Vert.x Web处理程序中阻止代码。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...