Queueable Apex — Limits & Duplicate Detection

DEX455 - 异步 Apex 完全指南:Queueable、Scheduled、Batch 与 Future 方法

📄 第 241 页 🎬 视频课程

课程章节介绍

同学们,今天我们来看一下Salesforce里异步处理的一个重要机制——‘可操作限制’,以及它怎么防止同一个作业被重复执行,造成资源浪费。 首先,每个同步事务,也就是单次请求的处理过程中,最多只能往队列里放50个作业。但如果你用的是Express事务(一种轻量级的异步模式),那这个限制更严格,每次只能放1个作业。所以,别一次性扔太多进去,得规划好。 接下来,有个你们可能会担心的点——‘链接深度’。简单说,就是一个作业执行完后,能不能再触发另一个作业,形成链式调用。好消息是,除了Developer Edition和Trial组织限制最多5层之外,其他版本没有深度限制,你可以放心地串起来用。 那既然没有深度限制,系统怎么防止同一个作业被重复提交导致冲突呢?这里就用到了‘重复检测’。它通过一个叫DeliverableDuplicateSignature.Builder的机制,给每个作业生成一个唯一的签名。你可以在签名里加上字符串、ID或者数字,组合成独一无二的标识。当你要提交一个新作业时,系统会检查有没有相同签名的作业正在排队或运行。 如果有一个相同签名的作业已经在排队等待,那系统会直接抛出一个DuplicateMessage异常,阻止你重复提交。但如果同样的作业目前正在运行中,系统反而会放行你的新提交。为什么呢?因为一个作业在被取出来开始执行时,它的签名就会从队列里移除。这样,旧作业完成之后,你的新作业就能补上,保证至少有一个实例在那边跑着,不会漏掉。 所以整体上,Salesforce用这种机制既防止了无意义的资源争用,又保证了作业的最终执行,非常巧妙。 好,今天就讲到这里,有问题随时问。

关键词

Apex Salesforce Developer Guide