我正在使用jax-rs 2客户端API设置REST客户端。 在api doc中它说“客户端是管理客户端通信基础设施的重量级对象。初始化以及客户端实例的处理可能是一个相当昂贵的操作。因此建议只构建少量客户端。应用程序中的实例。“ (https://docs.oracle.com/javaee/7/api/javax/ws/rs/client/Client.html)。根据这个声明,听起来客户端不是线程安全的,我不应该为所有请求使用单个客户端实例。
我正在使用CXF实现,到目前为止我没有找到为客户端对象设置池的方法。
如果有人有任何信息,请与您分享。
提前致谢。
答案 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