beanstalkd 之 Nodejs 客户端 bsw

简介

Beanstalkd - 一个高性能、轻量级的分布式内存队列系统。

英文协议

中文协议

安装

这里我们用 Docker 来运行。

1
2
docker pull schickling/beanstalkd
docker run -d -p 11300:11300 schickling/beanstalkd

beanstalkd 管理 WEB 平台,主要用来看看以后的任务详情。

1
2
docker pull schickling/beanstalkd-console
docker run -d -p 2080:2080 --link beanstalkd:beanstalkd schickling/beanstalkd-console

通过 127.0.0.1:2080 访问

使用

官方客户端推荐列表 Client

下面我们主要介绍 Nodejs 客户端 bsw

客户端安装

1
npm i bsw --save

客户端示例

这里我们用阿里开源框架 eggjs 做测试。
app.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
'use strict';
const { Consumer } = require('bsw');
module.exports = app => {
app.beforeStart(async () => {
const consumer = new Consumer({
host: 'localhost',
port: '11300',
tube: 'node',
async handler(payload, job_info) {
console.log('processing job: ', payload);
console.log('processing job_info: ', job_info);
// 这里进行业务操作
return 'success';
},
});
consumer.on('error', e => {
console.log(e);
});
console.log('beanstalkd启动了');
await consumer.start();
});
};

home.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
'use strict';
const Controller = require('egg').Controller;
const { Producer } = require('bsw');
class HomeController extends Controller {
async index() {
const producer = new Producer({
host: 'localhost',
port: '11300',
tube: 'node',
});
await producer.start();
await producer.putJob({
payload: JSON.stringify({ throw: true, result: 'success' }),
priority: 0, // 优先级
delay: 30, // 延时单位(s)
ttr: 60, // 允许worker执行的最大秒数
});
producer.stop();
this.ctx.body = 'hi, egg';
}
}
module.exports = HomeController;

天若有情天亦老,月如无恨月长圆