Setting Callout Timeouts

DEX455 - Apex 集成与工具完全指南:Callouts、命名凭据、WSDL2Apex、Mock 测试

📄 第 402 页 🎬 视频课程

课程章节介绍

那我们现在来看一下,在 Apex 里如何控制对外调用的超时时间,这个在集成里非常实用。 想象一下,我们的代码要去调用一个外部的 Web 服务或者 HTTP 接口,如果对方响应很慢,我们总不能一直等下去对吧?所以 Salesforce 允许我们自定义这个等待的最长时间,也就是超时。 对于 ,Web 服务调用,,也就是那种用 WSDL 生成代理类的方式,你可以在代码里给 `timeout_x` 这个特殊变量赋一个值。注意哈,变量名后面要带一个下划线 x,叫 `timeout_x`,单位是毫秒。 比如你想让它最多等 5 秒,那就设成 5000。如果不设,默认就是 10 秒。 那对于 ,HTTP 调用,,也就是我们用 `HttpRequest` 对象去发请求的情况,要设置的就不是变量了,而是调用对象的 `setTimeout` 方法,传进去的也是毫秒数。 这两种方式都遵循一样的限制:最小值不能小于 1 毫秒,最大值不能超过 120,000 毫秒,也就是 120 秒。 还有一点非常重要,一个 Apex 事务里,可能会调用好几次外部服务,对吧?所有调用的超时时间会,累加,起来。总的累积超时上限也是 120 秒。也就是说,如果你的代码在同一个事务里调了三次外部服务,每次设的超时加起来不能超过 120 秒,否则会报错。 所以我们在设计时就要心里有数,合理分配每个调用的超时,别让累积超时爆掉。 简单总结一下: - Web 服务调用:设 `timeout_x` 变量 - HTTP 调用:用 `setTimeout` 方法 - 单位都是毫秒,默认 10 秒,最小 1 毫秒,最大 120 秒 - 同一个事务里所有调用的超时时间累加,总上限也是 120 秒 好,这一小段就讲到这里,有什么不清楚的可以随时问我。

关键词

Apex Salesforce Developer Guide