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

Vertx WebClient跨多个顶点共享vs单个?

贺宏富
2023-03-14

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

到目前为止,我使用的是跨多个垂直链接共享的单个web客户端实例(通过GUI注入)

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

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

有人能帮忙找出同样的理想策略吗?

谢谢

共有1个答案

汪同
2023-03-14

垂直。x针对每个Verticle使用单个Web客户端进行了优化。在线程之间共享单个WebClient实例可能会起作用,但会对性能产生负面影响,并可能导致某些代码在“错误”的事件循环线程上运行,正如Vert首席开发人员Julien Viete所述。x:

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

此外,垂直。HttpClient的x文档是WebClient所使用的底层对象,明确声明不要在Vert之间共享它。x上下文(每个垂直线都有自己的上下文):

HttpClient可以在垂直或嵌入式中使用。

当在垂直中使用时,垂直应该使用它自己的客户端实例。

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

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

 类似资料:
  • 标题中的问题。这里提出了一个类似的问题,当时唯一的解决办法是将项目发布到本地Maven存储库中。 这个问题在Android Studio 0.5中修复了吗(正如一些人所声称的)?在其发行说明中有一条声明说“支持模块内容根目录之外的源文件夹”。这是否意味着我们最终可以从项目文件夹外部导入库? 我试过文件- 编辑2:查看最新解决方案的接受答案(截至0.8。) 编辑: 我的项目目录结构只有一个模块,如下

  • 下面的堆栈溢出问题 我尝试了在语句中使用两个重复的多个构造,但无法为每个起始顶点获得独立的。我也在使用平台,因此它限制了Gremlin的使用,其中不允许使用循环/脚本。所有gremlin查询必须以并由与链接在一起的命令组成 https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differences.ht

  • 我将Spring缓存与CacheManager结合使用,并可在10个不同的应用程序中缓存同一表中的相同数据。实现时的假设是,我们缓存的数据是元数据,不应更改。然而,他们正在更改这些数据,缓存永远不会被清除。 现在的要求是通过2个大请求同时清除所有10个应用程序的缓存。 每当mySQL工作台上的直接INSERT语句更改表时,所有应用程序缓存都应该刷新。我使用的是Hibernate和Spring,但请

  • 我有一个类“Vertex”包含双x,y。另一个类“Face”包含一个“Vertex”对象列表。相邻面共享相同的顶点。 目前,我正在为每个脸创建一个javafx.scene.shape.多边形,并将它们全部添加到我的场景中,看起来像这样:截图 现在我计划修改多边形,类似于:JavaFX modify polygons 问题是多边形不会保存对顶点对象的引用,而是保存双值。当我改变一个点的位置时,相邻多

  • 问题内容: 我想在两个节点实例之间共享由socket.io创建的房间,这些实例已经在使用redis- store,但是无法在不同的节点实例上获取io.sockets.in(ROOM_ID).emit(MESSAGE,DATA); 我正在尝试-实例A- 开阔一些东西,我能够使用 但是我需要从实例B执行类似的广播。 在实例B 上与上面类似,但我无法使用 我的理解是-redisStore会将socket

  • 问题内容: 我有多个具有相似构建步骤的项目,并且我正在研究在这些项目中重用Jenkinsfile管道。我很难找到有关如何实现这样的标准(我认为)设置的文档。 这是我的要求: 1)Jenkinsfile存储在回购中,在多个项目之间共享 2)每个项目都有其自己的参数:项目在仓库中的位置。 3)至少从用户角度来看,每个项目在Jenkins中都应独立,这意味着,例如,执行和日志可在Jenkins中的每个项