当前位置: 首页 > 知识库问答 >
问题:

如何使Vertx处理程序在eventloop的早期执行?

傅毅然
2023-03-14

我使用的是Vertx3.5.0,非常新。我试图在客户端取消请求时取消代码执行。

目前,我们要做的第一件事就是部署一个verticle来运行HttpServer,然后将所有路由添加到路由器。从这里开始,每个路由都有一个处理函数。在这个处理器中,我正在尝试:

routingContext.request().connection().closeHandler({
//execute logic for ending execution
});

这是我见过的唯一一个实际捕获连接关闭的方法,但问题是它没有在eventloop中足够早地执行处理程序。因此,如果我在那里有任何日志,它将看起来像:

...[vert.x-eventloop-thread-0]。。。。。

...(假设我在这一点上取消了请求)

...[vert.x-eventloop-thread-0]。。。。。

...(等待异步db调用前常规执行的最终日志)

...[vert.x-eventloop-thread-0]。。。。。(closeHandler代码的执行)

我希望closeHandler代码能够中断进程,并在事件实际发生时执行。

无论何时取消请求,情况似乎总是如此,因此我想我遗漏了一些关于Vertx如何处理异步性的信息。

我已经尝试过通过worker verticle在Routerhtml" target="_blank">对象的blockingHandler内部和HttpServer对象的connectionHandler内部执行closeHandler代码。结果都一样。

主代码的执行也不是由辅助垂直体执行的,而是由常规垂直体执行的。

谢谢!

共有1个答案

邬英武
2023-03-14

似乎您误解了什么是closeHandler。这是一个回调方法,即Vert。当请求关闭时,x调用。这不是提前终止请求的方法。

如果您想提前终止请求,一种方法是使用响应()。关闭()

作为一个脚注,我想提到这个垂直。X3.5.0已经4年了,您应该升级到3.9,或者,如果可以的话,升级到4.0

 类似资料:
  • 如果我有以下代码: 对该循环中某个处理程序的所有调用是并行执行还是顺序执行?如果是顺序的,那么要获得并行执行,正确的方法是什么? 当做

  • 我正在运行VertX HTTP服务器。当内容类型为超文本标记语言/表单时,它可以理解请求,但当我尝试发布JSON数据时,它甚至从未进入请求处理程序。 我需要做些什么才能让Vertx期望JSON吗?是否支持?

  • 上周我阅读了有关vertx的文档。我不明白的是vertx处理器是如何工作的?例如 和服务器是: (P.S.我知道我首先应该检查处理程序是否成功,然后采取一些措施,但为了简化代码,我删除了这种检查,如果在30秒内没有任何响应,则处理程序中会出现异常,也会从正式文档中删除。) 从上面的代码中,客户端每秒发送请求,并且不等待响应,但是它有一个处理程序,当响应到来时将执行该处理程序。 jdbcVertx监

  • 我正在使用vertx的JDBC lib,我需要批量插入包含数组字段的值。 我试过: 我的输出: 在切换到准备好的报表之前,我的工作要求是: 我的数据库是Apache Phoenix,是Hbase的sql层。 知道怎么解决吗?

  • 在我的示例项目中,我尝试在应用程序启动时做一些初始化工作。 Java 16 Vertx 4.1.0 检查完整的项目代码。 但它并没有像预期的那样工作。 没有像Reactor那样的方法 我找不到一种有效的方法来按顺序执行它们。 更新时间: 我按照建议更改了代码。 并在控制台中获取以下日志。 如何在输入打印结果之前确保插入块中的所有未来都已完成。

  • 在许多函数中,我们都有一个签名,比如,但是我们不能将Future传递给这个函数,对吗?