提供一个选项,在关闭 vertx 之前等待所有当前正在处理的/当前已排队的请求/事件完成
作者: azurvii创建于 2024年4月11日更新于 2026年9月18日
标签enhancement
描述特性
当调用`vertx.close ()' 时, 提供一个选项, 允许等待所有正在处理中 / 正在排队的请求 / 事件在关闭前完成 。 在“vertx.close()”电话之后添加的任何信息都应可以发出。
使用大小写
这一功能有助于在滚动升级部署方面实现无故障时间,例如Kubernetes。
例如,在4.5.7中,`vertx.close ()'中断了工人的线程,并强行关闭了所有活跃的HTTP连接。 这将使客户请求失败。 在K8s的滚动升级期间,这可能造成故障。
如果允许这些请求在关闭顶点之前正常完成,滚动升级的可能性就更大了。
我做了一个复制人来演示这个问题:https://GitHub.com/azurvii/issues-vertx-not-waiting-http-requests.
在这个复制器中,一个服务器的vertx实例在处理请求时正在做一些漫长的工作(Thread.sleep (5000)'),当一个客户端(一个单独的vertx实例)在等待返回请求时,服务器的vertx.close()实例上会调用一个vertx.close ()',这有可能来自停机钩. 客户端会得到一个错误和一个空的响应.
内容来源: eclipse-vertx/vert.x