2016-07-14 59 views
0

我正在使用Weblogic 12.2.1和内置的Jersey客户端2.21.1每隔几个小时向一个远程系统发出一批https请求。
为此,我有一个@Singleton bean,其中有一个@Scheduled方法,它在某些时候被Weblogic执行。因此,在每次执行@Scheduled方法时,我都会接连发出几个https调用。 所有请求都是同步的。Jersey客户端请求Java EE上的问题

问题是,由于某种原因,下一个请求会在先前(根据Wireshark输出)之后延迟一分钟发送。 Jersey的调用呼叫被阻止。立即响应。远程系统没有问题。

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

回答

0

实际上,当我在ApacheConnectorProvider的客户端中更改默认的HttpUrlConnectorProvider时,请求之间没有更多延迟。事实上,这个怎么泽西文档状态是:

...在复杂环境中(如应用服务器),其中一些可池化的连接可能会在你的应用程序甚至是白手起家的存在,这种做法是不是100%可靠的,我们建议使用不同的客户端传输连接器,例如Apache Connector。

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

警告

注意使用比默认连接器实现其他的。 WriterInterceptor或MessageBodyWriter中有一个处理HTTP头的问题。如果需要更改头字段,则不要使用ApacheConnectorProvider,也不要使用GrizzlyConnectorProvider,也不要使用JettyConnectorProvider。例如,该问题适用于也修改HTTP标头的Jersey Multipart功能。

最后我发现自己处于一种情况,我必须选择ApacheConnector(快速请求),没有多部分或多部分缓慢的请求。有趣不是吗?

我想我应该花更多时间研究其他实际上适用于Java EE环境的宁静客户端。