【发布时间】:2021-06-23 14:04:32
【问题描述】:
我正在使用 Vertx 3.5.0 并且对它非常陌生。当客户取消他们的请求时,我正在尝试取消代码执行。
目前它的设置是我们做的第一件事是部署一个verticle来运行一个HttpServer,然后我们将所有的Routes添加到Router中。从这里开始,每个路由都有一个处理函数。在这个处理程序中我正在尝试这个:
routingContext.request().connection().closeHandler({
//execute logic for ending execution
});
这是我见过的唯一真正捕获连接关闭的方法,但问题是它在事件循环中没有足够早地执行处理程序。因此,如果我在那里有任何日志,它将看起来像:
...[vert.x-eventloop-thread-0].....
...[vert.x-eventloop-thread-0].....(假设我此时取消了请求)
...[vert.x-eventloop-thread-0].....
...[vert.x-eventloop-thread-0].....(等待异步数据库调用之前的常规执行最终日志)
...[vert.x-eventloop-thread-0].....(closeHandler代码的执行)
我希望 closeHandler 代码中断进程并在事件实际发生时执行。
无论我何时取消请求,情况似乎总是如此,所以我想我错过了关于 Vertx 如何处理异步的一些内容。
我尝试通过一个worker Verticle,在Router对象的blockingHandler内部,以及HttpServer对象的connectionHandler内部执行closeHandler代码。结果都一样。
主要的代码执行也不是由一个worker Verticle执行的,只是一个普通的。
谢谢!
【问题讨论】:
标签: asynchronous vert.x vertx-verticle vertx-httpclient vertx-eventbus