目前在应用程序启动时,我正在部署单个 Verticle 并调用createHttpServer(serverOptions)
.
我已经设置了一个request().connection().closeHandler
用于处理关闭的连接事件,主要是当客户决定取消他们的请求时,我们会停止执行该请求。
但是,当我在同一个 Verticle 中设置该处理程序时,它似乎只在closeHandler
任何同步代码完成执行后才执行代码,并且我们正在等待数据库通过 Futures 和异步处理程序进行响应。
如果不是那样,我为每个新的 HTTP 请求部署一个工作节点,它会正确地中断执行以执行closeHandler
代码。
据我了解,HttpServer 已经应该自己处理请求的可伸缩性,因为它可以一次处理许多请求,而无需部署新的 Verticle。从本质上讲,这听起来像是一个 hacky 解决方法,一旦我们的应用程序如火如荼,它可能会影响我们的线程负载或类似性质的事情。所以我的问题是:
这是这样做的正确方法吗?
如果不是,那么正确的方法或范式是什么?
你如何从它自己的 verticle 和里面取消一个 verticle 的执行closeHandler
?通过取消执行,我的意思是包括任何等待完成的期货。
为什么在做这种多verticle方法时closeHandler只异步执行?使用正常方式并使用分配的线程池简单地执行请求会推迟 closeHandler 的执行,直到 eventloop 完成其队列,我们需要异步发生