异步调用
概述
支持异步调用模式,允许发起请求后立即返回,通过请求 ID 查询执行结果。
异步调用流程
1. 发起异步调用 → 返回 requestId
2. 立即响应 → 客户端继续其他任务
3. 服务端处理中...
4. 通过 requestId 查询结果
接口说明
发起异步调用
通过在请求头中添加 X-Invoke-Type: async 触发异步模式。
# CLI 异步调用
yrcli invoke --async my_function --payload '{"data": "test"}'
# REST API - 短路径
POST /invocations/<tenant-id>/<namespace>/<function-name>/
Header: X-Invoke-Type: async
# REST API - 标准路径
POST /serverless/v1/functions/<function-urn>/invocations
Header: X-Invoke-Type: async
响应(HTTP 202):
{
"requestId": "req-abc-123"
}
查询结果
# CLI 查询
yr result req-abc-123
# REST API
GET /serverless/v1/functions/async-results/<request-id>
响应:
{
"requestId": "req-abc-123",
"status": "completed",
"result": {...},
"createdAt": "2026-03-25T10:00:00Z",
"completedAt": "2026-03-25T10:00:05Z"
}
状态说明
| 状态 | 说明 |
|---|---|
| queued | 请求已排队 |
| processing | 正在处理 |
| completed | 执行完成 |
| failed | 执行失败 |
短 URL 支持
异步调用支持短 URL 路由,简化客户端调用:
/async/invoke/<tenant>/<function-name>
替代原来的完整路径格式。
Python SDK
import yr
# 发起异步调用
result = yr.invoke("my_function", data, async_=True)
request_id = result["requestId"]
# 查询结果
while True:
status = yr.get_result(request_id)
if status["status"] in ("completed", "failed"):
break
time.sleep(1)
print(status["result"])
配置参数
| 参数 | 类型 | 说明 | 默认值 |
|---|---|---|---|
asyncInvocation.enabled |
bool | 是否启用异步调用 | true |
asyncInvocation.resultRetentionMinutes |
int | 异步结果保留时间(分钟) | 60 |