Jersey客户端请求Java EE上的问题

时间:2016-07-14 10:47:24

标签: java-8 jersey-2.0 weblogic12c jersey-client

我使用Weblogic 12.2.1和内置的Jersey客户端2.21.1每隔几个小时向远程系统发出一批https请求。
为此,我有一个@Singleton bean,其@Scheduled方法在某些时候由Weblogic执行。因此,在每次执行@Scheduled方法时,我都会依次进行多次https调用。 所有请求都是同步的。

问题在于,由于某种原因,下一个请求在前一个请求发送后延迟一分钟(根据Wireshark输出)。泽西岛的召唤呼叫正在阻止。立即回应。远程系统没有问题。

在JUnit测试(普通java)中执行时发送请求的相同代码没有延迟。所有请求立即通过。所以也许是Weblogic容器的东西 有类似问题的人吗?

1 个答案:

答案 0 :(得分:0)

实际上,当我使用HttpUrlConnectorProvider更改了客户端中的默认ApacheConnectorProvider时,请求之间没有更多延迟。事实上,泽西岛的文件说明了这一点:

  

...在复杂环境(例如应用程序服务器)中,在应用程序甚至引导之前可能存在某些可用连接,这种方法不是100%可靠,我们建议使用不同的客户端传输连接器,例如Apache Connector。

但是如果你想使用客户端的多部分功能,又会出现另一个问题。在这方面,文档说:

  

警告

     

请注意使用默认Connector实现以外的其他方法。在WriterInterceptor或MessageBodyWriter中处理HTTP标头存在问题。如果您需要更改标题字段,请不要使用ApacheConnectorProvider,也不要使用GrizzlyConnectorProvider和JettyConnectorProvider。例如,该问题适用于还修改HTTP标头的Jersey Multipart功能。

最后我发现自己处于这样一种情况:我必须选择ApacheConnector(快速请求),而不需要使用multipart的多部分或慢速请求。好笑不是吗?

我想我应该花更多的时间研究其他正在从事Java EE环境工作的休闲客户。