我使用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是否会对性能产生任何影响?
处理多个处理程序的理想方法是什么?
谢谢你,妮丝·戈亚尔
发布于 2020-09-02 13:02:49
当控件传递给blockingHandler时,事件循环线程会发生什么?他们是否继续接受更多的要求?
是的,事件循环将将阻塞处理程序部分卸载到员工池并处理其他事件。
如果是
,那么当阻塞处理程序执行完成时会发生什么?
结果的事件被添加到事件循环队列中。
从eventLoop切换到blockingHandler (workerPool),然后再切换到eventLoop是否有任何性能影响?
线程之间的切换不是免费的,但是这种用例的总延迟(api网关)的成本应该可以忽略不计。
--处理多个处理程序的理想方法是什么?
理想情况下,您应该避免阻止Vert.x Web处理程序中的代码。
https://stackoverflow.com/questions/63703491
复制相似问题