我使用Weblogic 12.2.1和内置的Jersey客户端2.21.1每隔几个小时向远程系统发出一批https请求。
为此,我有一个@Singleton
bean,其@Scheduled
方法在某些时候由Weblogic执行。因此,在每次执行@Scheduled
方法时,我都会依次进行多次https调用。
所有请求都是同步的。
问题在于,由于某种原因,下一个请求在前一个请求发送后延迟一分钟(根据Wireshark输出)。泽西岛的召唤呼叫正在阻止。立即回应。远程系统没有问题。
在JUnit测试(普通java)中执行时发送请求的相同代码没有延迟。所有请求立即通过。所以也许是Weblogic容器的东西 有类似问题的人吗?
答案 0 :(得分:0)
实际上,当我使用HttpUrlConnectorProvider
更改了客户端中的默认ApacheConnectorProvider
时,请求之间没有更多延迟。事实上,泽西岛的文件说明了这一点:
...在复杂环境(例如应用程序服务器)中,在应用程序甚至引导之前可能存在某些可用连接,这种方法不是100%可靠,我们建议使用不同的客户端传输连接器,例如Apache Connector。
但是如果你想使用客户端的多部分功能,又会出现另一个问题。在这方面,文档说:
警告强>
请注意使用默认Connector实现以外的其他方法。在WriterInterceptor或MessageBodyWriter中处理HTTP标头存在问题。如果您需要更改标题字段,请不要使用ApacheConnectorProvider,也不要使用GrizzlyConnectorProvider和JettyConnectorProvider。例如,该问题适用于还修改HTTP标头的Jersey Multipart功能。
最后我发现自己处于这样一种情况:我必须选择ApacheConnector(快速请求),而不需要使用multipart的多部分或慢速请求。好笑不是吗?
我想我应该花更多的时间研究其他正在从事Java EE环境工作的休闲客户。