EggBornJS新增了Queue机制,允许以队列的方式执行任务

下面我们开发一个Queue,以队列的方式实现一个简单的逻辑

声明Queue

src/suite-vendor/test-party/modules/test-party/backend/src/config/config.js

  1. 1module.exports = appInfo => {
  2. 2 const config = {};
  3. 3
  4. 4 // queues
  5. 5 config.queues = {
  6. 6 queueTest: {
  7. 7 bean: 'test',
  8. 8 },
  9. 9 };
  10. 10
  11. 11 return config;
  12. 12};
名称 说明
queueTest Queue名称
bean Queue所对应的Bean组件

定义Bean组件

src/suite-vendor/test-party/modules/test-party/backend/src/bean/queue.test.js

  1. 1module.exports = app => {
  2. 2 class Queue extends app.meta.BeanBase {
  3. 3
  4. 4 async execute(context) {
  5. 5 const data = context.data;
  6. 6 return data.a + data.b;
  7. 7 }
  8. 8
  9. 9 }
  10. 10
  11. 11 return Queue;
  12. 12};
名称 说明
context.data 外部传入的参数

注册Bean组件

src/suite-vendor/test-party/modules/test-party/backend/src/beans.js

  1. 1const scheduleTest = require('./bean/schedule.test.js');
  2. 2
  3. 3module.exports = app => {
  4. 4 const beans = {
  5. 5 // queue
  6. 6 'queue.test': {
  7. 7 mode: 'app',
  8. 8 bean: queueTest,
  9. 9 },
  10. 10 };
  11. 11 return beans;
  12. 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

  1. 1async pushAsync() {
  2. 2 const res = await this.ctx.app.meta.queue.pushAsync({
  3. 3 locale: this.ctx.locale,
  4. 4 subdomain: this.ctx.subdomain,
  5. 5 module: 'test-party',
  6. 6 queueName: 'queueTest',
  7. 7 data: { a: 1, b: 2 },
  8. 8 });
  9. 9 assert.equal(res, 3);
  10. 10 this.ctx.success();
  11. 11}
名称 说明
queue.pushAsync 有返回值的调用方式
locale 本地化
subdomain 当前实例对应的子域名,以便执行队列任务时可以正确的回到当前实例的运行环境
module 队列所属模块名称
queueName 队列名称
data 向队列任务传递的参数

- 无返回值

src/suite-vendor/test-party/modules/test-party/backend/src/controller/test/feat/queue.js

  1. 1async push() {
  2. 2 this.ctx.app.meta.queue.push({
  3. 3 locale: this.ctx.locale,
  4. 4 subdomain: this.ctx.subdomain,
  5. 5 module: 'test-party',
  6. 6 queueName: 'queueTest',
  7. 7 data: { a: 1, b: 2 },
  8. 8 });
  9. 9 this.ctx.success();
  10. 10}