我有一个基于Spring Boot的简单Web应用程序,可以从多个API下载数据。其中一些没有及时响应,因为我connectionTimeout
设置为4秒。
一旦摆脱connectionTimeout
设置,大约20秒钟后就会出现异常。
因此,我的问题是,我可以尝试连接API多长时间,它依赖什么?那20秒从哪里来?如果一个API在40分钟的时间后响应,而我将无法捕捉到特定的时刻并丢失数据,该怎么办?我不希望那样发生。我有什么选择?
这是设置连接的代码。没什么特别的。
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(HttpClientBuilder.create().build());
clientHttpRequestFactory.setConnectTimeout(4000);
RestTemplate restTemplate = new RestTemplate(clientHttpRequestFactory);
然后我通过以下方式检索值:
myObject.setJsonString(restTemplate.getForObject(url, String.class));
连接超时意味着您的程序在指定的时间内根本无法连接到服务器。可以配置超时,因为就像您说的那样,某些系统可能需要更长的时间才能连接,并且如果事先知道,则可以允许。否则,超时将起到保护作用,以防止应用程序永远等待,这在大多数情况下并不能真正带来良好的用户体验。
通常可以配置一个单独的超时来读取数据(套接字超时)。他们彼此之间不包容。
解决您的问题:
检查服务器是否正在运行并接受传入连接。您可能要使用curl
或取决于仅仅是浏览器尝试进行连接。
如果一个工具可以连接,而另一个工具不能连接,请检查防火墙设置,并确保允许从Java程序进行传出连接。测试是否存在问题的最简单方法是暂时禁用防病毒和防火墙工具。如果这允许连接,则您要么需要关闭固件,要么最好添加一个相应的异常。
在测试时,将超时设置为较高的设置(或尝试将其设置为0,这被解释为无限)。一旦工作,就可以考虑对其进行调整以反映您的服务器规格和可用性要求。
编辑:
我意识到这并不一定会有所帮助,因为您最终实现了连接。我将上述信息保留为一般信息。
我可以尝试连接API多长时间,它依赖什么?
最有可能托管API的服务器。如果过载,响应时间可能会延长。
那20秒从哪里来?
同样,这取决于API服务器。它可能是随机的,或者可能是在固定时间段内处理每个请求,然后才发现自己处于错误状态。在这种情况下,每次可能需要20秒。
如果一个API在40分钟的时间后响应,而我将无法捕捉到特定的时刻并丢失数据,该怎么办?我不希望那样发生。我有什么选择?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句