是否可以在VertX中为每个请求设置单独超时?
这样做,
val vertx = Vertx.vertx(VertxOptions().setMaxWorkerExecuteTime(15000))
设置所有请求的超时。 像巨大的报告这样的某些东西需要比默认的30秒多一点。
这就是我目前正在做的事情(简化):
val vertx = Vertx.vertx()
val router = Router.router(vertx)
router.route(url).handler { rtx ->
rtx.request().bodyHandler { btx ->
rtx.vertx().executeBlocking<RestResponse>({ block ->
val timer = timer(period = 150000) {
block.fail("timeout")
}
... blocking code here ...
timer.cancel()
block.complete(res)
}, { block ->
}
}
}
在VertX中是否有正式的方法,或者上述情况应该没问题?
答案 0 :(得分:2)
Vert.x网络Route
有一个blockingHandler
方法,您可以将其与TimeoutHandler
结合使用(如果请求在写入响应之前超时,则返回503
)。
router.get("/foo").handler(TimeoutHandler.create(150000))
router.get("/foo").blockingHandler({ routingContext ->
// Blocking code
})
此外,VertxOptions.setMaxWorkerExecuteTime
只会告诉Vert.x何时应显示阻止(工作人员)线程警告。该值预计为纳秒。