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

多个主机的多个WebClient(Spring webflux)

阳英朗
2023-03-14

在我的应用程序中,我调用了4个不同的API(都在不同的主机上)。我希望为每个主机和其他参数(如保持活动状态等)提供一个单独的连接池。我可以使用单个WebClient实现这一点,还是需要4个不同的WebClient实例?

另外,为每个主机设置一个单独的连接池有意义吗?如果没有,我可以使用单个WebClient实现这一点吗?

共有1个答案

汪晟睿
2023-03-14

这实际上取决于SpringWebFlux使用的底层HTTP库。现在Spring支持Reactor Netty(默认)和Jetty客户端。

默认情况下,WebClient将有一个连接池;根据主机端口密钥和反应器重用连接。内蒂。资源。ConnectionProvider将是弹性的,这意味着它永远不会等待打开新连接。您可以配置自己的连接,并将最大连接数设置为固定值。

据我所知,在TCP级别使用io.netty.channel.ChannelOption来处理保持有效和所有与TCP相关的选项。我认为您不能在每个主机或每个连接池的基础上更改它们,因为它们属于事件循环资源。

其他客户端,如Jetty,可能会提供不同的选项,但我假设您在这里使用的是默认的选项。

我看不出有任何强有力的理由为每台主机设置一个连接池。我们通常试图实现的是最大限度的资源利用率。例如,在SpringBoot中,我们自动配置东西,以便服务器和客户端(在同一个应用程序中)重用相同的资源。由于其中一些与CPU内核的数量有关,因此重用相同的内核可以提高总体效率。

有很多与TCP相关的选项,除非您有一个非常具体的问题要解决,否则我认为应该保留默认值,因为在这些选项中考虑了很多。

 类似资料:
  • 问题内容: 单个主机上的多个glibc库 我的Linux(SLES-8)服务器当前具有glibc-2.2.5-235,但是我有一个无法在该版本上运行的程序,并且需要glibc-2.3.3。 是否可以在同一主机上安装多个glibcs​​? 这是我在旧glibc上运行程序时遇到的错误: 因此,我创建了一个名为newglibc的新目录,并将以下文件复制到其中: 和 但是我得到一个错误: 如此看来,它们仍

  • 我有一个在多个服务器上运行的剧本。所有服务器都需要指定密码,该密码特定于运行Playbook的每个用户。在运行playbook时,我不能使用,因为服务器上的sudo密码不同。这与另一个关于多个sudo密码的问题中的情况相同。 一个可行的解决方案是在中指定: 除了之外,每个主机还定义了其他变量。这些变量应该提交给git存储库。但是,由于特定于运行playbook的每个用户,所以我希望有一个单独的文件

  • 我试图使用WebClient并行地发出请求,但我不知道如何执行,因为无论我做什么,代码都不会等待请求完成。如果我只执行一个请求(注释片段),一切正常。有人能帮我吗?

  • 我使用vert. x作为api网关将调用路由到下游服务。 到目前为止,我使用的是跨多个垂直链接共享的单个web客户端实例(通过GUI注入) 每个verticle都有自己的webclient有意义吗?它是否有助于提高性能?(我的每个网关实例运行64个Vericle,每秒处理大约1000个请求) 每种方法的优缺点是什么? 有人能帮忙找出同样的理想策略吗? 谢谢

  • 我们正在开发一个应用程序,我们想听Kafka中不止一个主题。所有主题都有一个分区。所有主题名称都有一个公共的前缀,例如“test-x”、“test-y”,所以我们可以对它使用spring。 我们希望编写一个java spring使用者,它使用模式监听所有主题。我们的想法是,我们可以运行同一个消费者(属于同一个组)的多个实例,Kafka将为不同的消费者分发来自不同主题的消息。 然而,这似乎并不奏效。