Jax rs客户端池

时间:2016-07-14 15:29:01

标签: client jax-rs cxf

我正在使用jax-rs 2客户端API设置REST客户端。 在api doc中它说“客户端是管理客户端通信基础设施的重量级对象。初始化以及客户端实例的处理可能是一个相当昂贵的操作。因此建议只构建少量客户端。应用程序中的实例。“ (https://docs.oracle.com/javaee/7/api/javax/ws/rs/client/Client.html)。根据这个声明,听起来客户端不是线程安全的,我不应该为所有请求使用单个客户端实例。

我正在使用CXF实现,到目前为止我没有找到为客户端对象设置池的方法。

如果有人有任何信息,请与您分享。

提前致谢。

1 个答案:

答案 0 :(得分:1)

默认情况下,CXF使用基于in-JDK HttpURLConnection对象的传输来执行HTTP请求。

执行连接池,允许持久连接为多个http请求重用底层套接字连接。

设置这些系统属性以配置池(默认值)

http.keepalive=true
http.maxConnections=5

增加http.maxConnections的值,以设置每个目标将同时保持活动状态的最大空闲连接数。请参阅此link属性properties.html

的完整列表

在这篇文章中详细解释了它的工作原理

Java HttpURLConnection and pooling

另请注意,默认情况下,默认JAX-RS客户端不是线程安全的。检查正确使用的限制here

当您需要同时执行多个请求时,CXF也可以使用异步apache HttpAsyncClient。这里有详细信息

http://cxf.apache.org/docs/asynchronous-client-http-transport.html