我们想创建一个出站消息队列系统,该系统将单独处理请求,以便处理任何外部 Web 服务。这些请求应该被处理的频率是可变的,但作为一个例子,我们可能希望进程每 30 秒运行一次。
在一小时内每 30 秒安排 120 次相同的作业是不可能或不切实际的。
我最终确定的方法是链接调度顶点(等到预定时间,调用未来方法并删除(中止)本身)-> 未来调用(如果有一个处理请求并重新安排类在 30 秒内重新运行)-> 调度apex(在 30 秒内调用未来方法,自行中止)-> 未来调用(处理请求和重新安排)等等无限期地。最终结果已经在生产中运行了 2 周,但未能自行重新安排,我不明白为什么。
我相信正在发生的事情是我违反了某种州长限制,但我不明白如何。我在我的沙盒上更频繁地遇到类似问题,并且收到了一个限制异常,指出已超出未来请求的限制。
从服务失败的那一刻起,我查询了前 24 小时内的所有异步作业(不仅仅是未来),它只返回 2200。我相信这个数字应该是 4400,因为我认为计划作业没有出现(预定的作业在调用 future 方法后会自行中止)。
即便如此,Salesforce 声明我们每 24 小时允许 250,000 次异步顶点执行,所以我不明白发生了什么。有没有人有任何尝试以这种方式链接预定作业的经验?有没有更好的方法来实现这一目标?是否有我不知道的限制,或者我以错误的方式测量异步执行?
任何帮助或建议将不胜感激。