【问题标题】:Vertx WebClient shared vs single across multiple verticles?Vertx WebClient 在多个 Verticle 之间共享还是单一?
【发布时间】:2020-12-01 04:56:07
【问题描述】:

我使用 vert.x 作为 api 网关将调用路由到下游服务。

到目前为止,我正在使用单个 Web 客户端实例,该实例在多个 Verticle 之间共享(通过 guice 注入)

每个verticle都有自己的webclient有意义吗?对提高性能有帮助吗? (我的每个网关实例运行 64 个 Vericles,每秒处理大约 1000 个请求)

每种方法的优缺点是什么?

有人可以帮助找出相同的理想策略吗?

谢谢

【问题讨论】:

    标签: vert.x vertx-verticle vertx-httpclient vert.x-webclient


    【解决方案1】:

    Vert.x 针对每个 Verticle 使用单个 WebClient 进行了优化。在线程之间共享单个 WebClient 实例可能有效,但它可能会对性能产生负面影响,并可能导致某些代码在“错误”事件循环线程上运行,as described by Julien Viet,Vert.x 的首席开发人员:

    因此,如果您在 Verticle 之间共享一个 Web 客户端,那么您的 Verticle 可能会重用以前打开的连接(因为池化)并且您 将在您意想不到的事件循环上获得回调。此外 Web 客户端中的同步可能会变得满足 当从不同的线程集中使用时。

    此外,the Vert.x documentation for HttpClient,这是WebClient 使用的底层对象,明确声明不在 Vert.x 上下文之间共享它(每个 Verticle 都有自己的上下文):

    HttpClient 可用于 Verticle 或嵌入。

    在 Verticle 中使用时,Verticle 应该使用自己的客户端 实例。

    更一般地说,一个客户端不应该在不同的 Vert.x 之间共享 上下文,因为它可能导致意外行为。

    例如,保持活动连接将调用客户端处理程序 打开连接的请求的上下文,后续 请求将使用相同的上下文。

    【讨论】:

    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2015-09-11
    • 2012-07-22
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多