【发布时间】:2023-02-19 10:16:31
【问题描述】:
大约一周前,我在 Salesforce Stack Overflow 中问了这个问题,想重新发布它,但方法略有不同:https://salesforce.stackexchange.com/questions/366936/salesforce-rest-api-intermittent-timeouts
作为背景知识,我有一个 Spring Boot 应用程序,它连接到 Salesforce 环境并将其用作数据库。因此,Spring Boot 应用程序调用 Salesforce REST API 以创建/更新对象以及查询它们。
我遇到的问题是,在调用查询端点 (/services/data/v34.0/query?q=) 时,大约有 5% 的时间请求超时,我在我的应用程序中收到此错误:
org.springframework.web.client.ResourceAccessException: I/O error on GET request for "https://X.my.salesforce.com/services/data/v34.0/query": Read timed out; nested exception is java.net.SocketTimeoutException: Read timed out
如前所述,此请求大部分时间都有效,但不幸的是它失败了,导致应用程序内部出现严重的不稳定。
我在这里重新提出这个问题的原因是因为我有一些额外的非 Salesforce 相关问题。值得注意的是,该应用程序向其他服务发出大量其他出站请求,这些请求总是成功的,或者至少不会超时。
鉴于此信息:
- 我们可以确定这是我们 Salesforce 环境的问题还是客户端 (Spring Boot) 问题?
- 有没有办法确认这一点?即获取有关请求超时原因的更多信息。
我尝试将
RestTemplate中出站请求的读取超时值设置为非常高的值,但这只会增加超时发生前的时间长度。如果没有超时,这些查询请求通常只需不到一秒的时间即可运行。我还对正在运行的 JVM 进行了一些分析,并且在这些超时发生时看不到任何异常。发生这种情况时,仍有大量可用内存和 CPU 资源以及可用线程。
如果您需要有关此的更多信息,请告诉我,在此先感谢您的帮助!
【问题讨论】:
-
请求的超时设置是多少?
标签: spring-boot salesforce timeout