并发任务

一般来说我们把长耗时,消耗大量资源,或者容易出错的逻辑,非常适合从请求主流程中剥离出来,异步执行。例如新用户注册,注册成功后,系统通常会发送一封欢迎邮件。发送欢迎邮件的动作就可以从注册流程中剥离出来,作为异步任务执行。这样应用服务器避免被图片处理等计算密集型任务压垮,用户也能更快的得到响应。Yao 支持添加异步任务来减少服务器请求压力。

Yao 支持 task 并发任务

  • 新建文件目录 /tasks/task.js:
{
"name": "测试task",
"worker_nums": 10,
"attempts": 3,
"attempt_after": 200,
"timeout": 2,
"size": 1000,
"process": "scripts.task.Send",
"event": {
"next": "scripts.task.NextID",
"add": "scripts.task.OnAdd",
"success": "scripts.task.OnSuccess",
"error": "scripts.task.OnError",
"progress": "scripts.task.OnProgress"
}
}
参数含义说明
name任务名称
worker_nums指定进程数
attempts失败重试次数
attempt_after重试间隔
timeout超时时间
process该 task 绑定的处理器
next生成任务唯一 id
add添加任务时触发的方法
success任务处理成功后触发方法
error任务失败后触发方法
progress任务处理中调用

新建 scripts/task.js

查看源码

新建路由apis/task.http.json

{
"name": "任务",
"version": "1.0.0",
"description": "任务",
"guard": "",
"group": "task",
"paths": [
{
"path": "/task",
"method": "GET",
"process": "scripts.test.task",
"in": [],
"out": {
"status": 200,
"type": "application/json"
}
}
]
}

新建测试函数 scripts/test.js

function task() {
for (i = 1; i < 100; i++) {
Process("tasks.test.Add", "进入任务" + i);
}
}

运行项目 yao start 访问 url 127.0.0.1:5099/api/task/task可以看到打印信息

并发任务

一般来说我们把长耗时,消耗大量资源,或者容易出错的逻辑,非常适合从请求主流程中剥离出来,异步执行。例如新用户注册,注册成功后,系统通常会发送一封欢迎邮件。发送欢迎邮件的动作就可以从注册流程中剥离出来,作为异步任务执行。这样应用服务器避免被图片处理等计算密集型任务压垮,用户也能更快的得到响应。Yao 支持添加异步任务来减少服务器请求压力。

Yao 支持 task 并发任务

  • 新建文件目录 /tasks/task.js:
{
"name": "测试task",
"worker_nums": 10,
"attempts": 3,
"attempt_after": 200,
"timeout": 2,
"size": 1000,
"process": "scripts.task.Send",
"event": {
"next": "scripts.task.NextID",
"add": "scripts.task.OnAdd",
"success": "scripts.task.OnSuccess",
"error": "scripts.task.OnError",
"progress": "scripts.task.OnProgress"
}
}
参数含义说明
name任务名称
worker_nums指定进程数
attempts失败重试次数
attempt_after重试间隔
timeout超时时间
process该 task 绑定的处理器
next生成任务唯一 id
add添加任务时触发的方法
success任务处理成功后触发方法
error任务失败后触发方法
progress任务处理中调用

新建 scripts/task.js

查看源码

新建路由apis/task.http.json

{
"name": "任务",
"version": "1.0.0",
"description": "任务",
"guard": "",
"group": "task",
"paths": [
{
"path": "/task",
"method": "GET",
"process": "scripts.test.task",
"in": [],
"out": {
"status": 200,
"type": "application/json"
}
}
]
}

新建测试函数 scripts/test.js

function task() {
for (i = 1; i < 100; i++) {
Process("tasks.test.Add", "进入任务" + i);
}
}

运行项目 yao start 访问 url 127.0.0.1:5099/api/task/task可以看到打印信息