Salesforce 异步概述 -- Salesforce Queueable Apex

通过使用Queueable接口来控制异步Apex进程。该接口允许您向队列中添加作业并监视它们。与使用future方法相比,使用接口是运行异步Apex代码的一种增强方式。
 
长时间运行的Apex进程,比如大量的数据库操作或外部web服务调用,可以通过实现Queueable接口并向Apex作业队列添加作业来异步运行。通过这种方式,异步Apex作业将在后台自己的线程中运行,而不会延迟执行.
Queueable 类似于future方法,因为它们都在队列中等待执行,但它们为您提供了这些额外的好处。
•Getting an ID for your job: 通过System.enqueueJob method 方法返回job id在AsyncApexJob中监控job
•Using non-primitive types: 你的Queueable 类可以包含非基元数据类型的成员变量,如sObjects或自定义顶点类型。这些对象可以在作业执行时被访问。
•Chaining jobs: 通过从一个正在运行的作业中启动第二个作业,可以将一个作业链接到另一个作业。如果您的进程依赖于另一个进程先运行。
 
public class AsyncExecutionExample implements Queueable {
public void execute(QueueableContext context) {
Account a = new Account(Name='Acme',Phone='(415) 555-1212');
insert a;
}
}
 
要将该类作为作业添加到队列中,调用此方法:
ID jobID = System.enqueueJob(new AsyncExecutionExample());
之后便可通过AsyncApexJob监控此Job
AsyncApexJob jobInfo = [SELECT Status,NumberOfErrors FROM AsyncApexJob WHERE Id=:jobID];
 
Chaining Jobs
public class AsyncExecutionExample implements Queueable {
public void execute(QueueableContext context) {
// Your processing logic here
// Chain this job to next job by submitting the next job
System.enqueueJob(new SecondJob());
}
}
 
Limite
 
•在一个事务中,最多可以使用System.enqueueJob向队列中添加50个作业。在异步事务中(用于
例如,从批处理Apex作业),您只能使用System.enqueueJob向队列添加一个作业。调用Limits.getQueueableJobs()来检查有多少
可排队的作业已经添加到一个事务中
•因为没有对链接作业的深度进行限制,所以可以将一个作业链接到另一个作业。你可以对每一个重复这个过程对于开发版和试用版组织,链接作业的最大堆栈深度
是5
•当使用 System.enqueueJob链接作业时, 你只能在已经运行的job中链接一个job. 只有一个child job可以存在
 
 
posted on 2021-05-11 15:47  Bzi~  阅读(412)  评论(0)    收藏  举报