Jersey Client可以在多线程环境中用于消费rest api吗



我想为多线程项目创建一个Jersey客户端。我需要为客户端创建连接池吗?

服务器上有500个TPS流量。如何计算以下参数以获得最佳性能。

ConnectionTimout、SocketTimeout、ReadTimeout、MaxConnectionPerHost、MaxConnections。

重置连接池的概念是什么?何时使用?

Jersey Client对多个请求执行是线程安全的。文档

创建WebResource实例的方法是线程安全的。方法修改配置和/或筛选器的线程安全。

创建客户端实例是一项昂贵的操作实例可以使用并保留许多资源。因此建议重新使用客户端实例来创建需要相同配置设置的WebResource实例。

建议对多个请求执行重用Client类的同一实例。更改Client配置不是线程保存,必须进行适当处理。

是否需要为客户端创建连接池
简短回答是。
默认情况下,泽西岛客户端使用BasicHttpClientConnectionManager。文档

这是一个简单的连接管理器,只维护一个一次连接。即使这个类是线程安全的,它也应该仅由一个执行线程使用。BasicHttpClientConnectionManager将努力重用用于具有相同路由的后续请求的连接。它将,但是,请关闭现有连接,然后为给定的路由,如果持久连接的路由与连接请求的。如果连接已经分配,则抛出java.lang.IollegalStateException。

对于多线程应用程序,您需要用PoolingHttpClientConnectionManager覆盖默认值。

它是一个更复杂的实现,用于管理客户端池连接,并且能够为来自多个执行线程。连接是以每条路由为基础进行池化的。A.对管理器已具有持久路由的请求池中可用的连接将通过租赁连接,而不是创建一个全新的连接。

PoolingHttpClientConnectionManager保持的最大限制为基于每条路由和总计的连接。默认情况下每个实现将创建不超过2个并发连接给定路由,总共不超过20个连接。对于许多现实世界应用程序——这些限制可能会被证明过于约束,尤其是在他们使用HTTP作为其服务的传输协议。

有关Apache连接管理的详细信息

配置
一般建议避免Jersey默认设置的无限长超时。在出现问题时,它可能会产生卡住的线程。请参阅web服务超时的最佳实践选择正确的值。没有特定的值,它们应该根据服务和环境性能进行设置。正确的超时和连接大小将在性能测试或实时使用后的时间内确定。
只要灵活地实现它,就可以随时调整设置。


读取超时

读取超时间隔属性,单位为毫秒。值必须是Integer的实例。如果属性不存在,则默认值是无穷大的区间。零值0相当于无穷大间隔

您可以像初始值一样设置1分钟。此外,在特殊情况下,您可以覆盖每个请求的超时。


连接超时

Connect timeout interval属性,以毫秒为单位。值必须为Integer的实例。如果属性不存在,则默认值是无穷大的区间。值0相当于无穷大间隔

将500-1000毫秒设置为初始值。


MaxConnectionPerHost
设置20个连接,如初始值。


最大连接数
将200个连接设置为初始值。

最新更新