EggBornJS新增了Queue
机制,允许以队列的方式执行任务
下面我们开发一个Queue
,以队列的方式实现一个简单的逻辑
声明Queue
src/suite-vendor/test-party/modules/test-party/backend/src/config/config.js
- 1module.exports = appInfo => {
- 2 const config = {};
- 3
- 4 // queues
- 5 config.queues = {
- 6 queueTest: {
- 7 bean: 'test',
- 8 },
- 9 };
- 10
- 11 return config;
- 12};
名称 | 说明 |
---|---|
queueTest | Queue名称 |
bean | Queue所对应的Bean组件 |
定义Bean组件
src/suite-vendor/test-party/modules/test-party/backend/src/bean/queue.test.js
- 1module.exports = app => {
- 2 class Queue extends app.meta.BeanBase {
- 3
- 4 async execute(context) {
- 5 const data = context.data;
- 6 return data.a + data.b;
- 7 }
- 8
- 9 }
- 10
- 11 return Queue;
- 12};
名称 | 说明 |
---|---|
context.data | 外部传入的参数 |
注册Bean组件
src/suite-vendor/test-party/modules/test-party/backend/src/beans.js
- 1const scheduleTest = require('./bean/schedule.test.js');
- 2
- 3module.exports = app => {
- 4 const beans = {
- 5 // queue
- 6 'queue.test': {
- 7 mode: 'app',
- 8 bean: queueTest,
- 9 },
- 10 };
- 11 return beans;
- 12};
注册名称 | 场景 | 所属模块 | global | beanFullName |
---|---|---|---|---|
test | queue | test-party | false | test-party.queue.test |
使用Queue
- 有返回值
src/suite-vendor/test-party/modules/test-party/backend/src/controller/test/feat/queue.js
- 1async pushAsync() {
- 2 const res = await this.ctx.app.meta.queue.pushAsync({
- 3 locale: this.ctx.locale,
- 4 subdomain: this.ctx.subdomain,
- 5 module: 'test-party',
- 6 queueName: 'queueTest',
- 7 data: { a: 1, b: 2 },
- 8 });
- 9 assert.equal(res, 3);
- 10 this.ctx.success();
- 11}
名称 | 说明 |
---|---|
queue.pushAsync | 有返回值的调用方式 |
locale | 本地化 |
subdomain | 当前实例 对应的子域名 ,以便执行队列任务时可以正确的回到当前实例 的运行环境 |
module | 队列所属模块名称 |
queueName | 队列名称 |
data | 向队列任务传递的参数 |
- 无返回值
src/suite-vendor/test-party/modules/test-party/backend/src/controller/test/feat/queue.js
- 1async push() {
- 2 this.ctx.app.meta.queue.push({
- 3 locale: this.ctx.locale,
- 4 subdomain: this.ctx.subdomain,
- 5 module: 'test-party',
- 6 queueName: 'queueTest',
- 7 data: { a: 1, b: 2 },
- 8 });
- 9 this.ctx.success();
- 10}
评论: