课程章节介绍
同学们,今天我们来聊聊Apex里对外部系统做HTTP调出的一些限制。这些限制虽然听起来挺多,但理解起来并不难,我一项一项给你说清楚。
首先,在一个Apex事务里,你最多可以做100次对外部的调用。也就是说,假设你写了一个触发器或者一个批处理作业,它一次运行中向不同的网址发了请求,总共不能超过100次。记住,这是整个事务的合计数。
第二点,如果你的组织是Developer Edition,就是那种免费开发者版本,那么有一个特殊限制:你最多只能创建20个并发的对外调用。什么叫并发?就是同时发起的请求。比如你一次发起30个请求,在Developer Edition里就会报错,最多只能20个同时出去。但如果你用的是正式的生产环境或沙盒,这个限制就不适用了,你想发几个并发都可以,只要不超其他限制。
接下来是超时时间。Apex默认每个调出等待时间是10秒,也就是服务器不响应就停止了。但你可以自定义这个时间,最短可以设成1毫秒,最长可以设成120,000毫秒,也就是120秒。你可以用这个方法灵活控制:比如某个服务特别慢,你给它设长一些;如果要求快速失败,就设短一些。
还有一点要注意,一个事务中所有调出的超时时间累加起来,不能超过120秒。举个例子,你发了3个请求,每个请求设了50秒的超时,那么加起来就是150秒,超过了120秒的限制,这就不行。所以在设计时,你要考虑所有调用的总等待时间。
最后还有一个比较体贴的设计:在计算长时间运行的请求限制时,HTTP超时等待的时间是不算在内的。也就是说,当你那些调用都在等服务器应答时,这个等待时间是会被“暂停计时的”。等超时一结束,计时器才会继续跑。这样就不会因为等外部服务而让事务被误判为慢事务了。
简单回顾一下:
- 总共调用次数不超过100次;
- 并发调用限制只在Developer Edition有,20个;
- 每个调用可以自定义超时,默认10秒,最长120秒;
- 所有调用的超时加起来不能超过120秒;
- 而且等待超时的时间,不占慢事务的配额。
理解了这些,你在写集成外部系统的代码时就能心里有数了。有什么问题随时问,我们继续。
关键词
Apex
Salesforce
Developer Guide