月萌API异步任务是什么?

在某些情况下,完成 API 请求将会涉及到大量的计算或存储资源,消耗大量的时间,此时对于客户端的请求,一般有两种处理方式:

  • 强制客户端等待请求的完成(同步方式)

  • 立即返回响应状态,并将请求结果推迟到以后的某个时间点(异步方式)

比如在 条码生成 API 接口 中,批量生成时最多支持一次 20000 个条码的生成,假设平均一个条码生成需要约 10ms 时间,那么完成一次批量生成需要 200s 时间。

如果使用方式一同步方式,表现为客户端的请求会一直持续(卡住、hang) 200s 时间,这样的操作可能带来的各种超时问题、影响其它的线程业务等。

如果使用方式二异步方式,服务端立即返回异步 JOB 任务已创建的消息,同时返回 JOB ID 信息,随后客户端等待一定时间后(如 10 秒),通过 JOB ID 查询异步任务的状态,若异步任务未完成,则可 10 秒后再次重试,若异步任务完成,可直接在返回数据中获取最终的业务响应数据(如批量创建的条码的压缩包 URL 链接)。


通常说来,较消耗 CPU 计算资源的请求都将封装为异步任务,对所有请求进行根据优先级进行订阅方案分组排队处理,比如人像扣图接口,每次请求都将消耗约 20% 的 CPU 资源,并发处理这些请求可能耗尽服务器资源。

月萌API异步任务执行流程是怎样的?

异步任务的创建主要分成这几步:

  1. 客户端请求异步任务(根据接口支持情况)。

  2. 服务端创建任务,并返回错误码 MNA-000202 的响应信息,同时包含 jobid 异步任务号参数(http 状态码为 202,表示请求已经接受,但还没有处理)。

  3. 客户端每隔一段时间通过 jobid 查询异步任务状态,使用如下 URL (不需签名):

    http://api.moonapi.com/job?jobid=JOB_ID&keyid=KEY_ID&_t=

  4. 服务端返回异步状态:error MNA-000010 任务未开始,error MNA-000011 任务未完成,error MNA-000013 任务出错,success 任务完成。

  5. 服务端处理异步任务并记录结果。

  6. 任务未开始或未完成时,客户端可等待一段时间后再次查询任务状态。任务出错时需根据相应的信息进行处理。任务完成时直接在响应数据中获取业务返回数据。

任务创建返回 MNA-000202 是因为根据 HTTP 响应码,202 表示请求已接受,但还没有处理。

异步任务的状态查询简单说来遇到任务未开始、任务未完成时隔段时间重试,遇到任务出错、任务完成时整个请求流程结束。