您的位置:首页 > 数据库 > Redis

nodejs+redis以最少的代码实现消息队列

2017-10-19 16:42 946 查看
1、我的认识:

查阅资料,使用redis实现消息队列主要有两种方法

- 发布订阅模式

- 生产消费模式

这里主要说使用nodejs+redis来实现生产消费模式

2、代码实现:

生产者实现代码

redisCli.lpush('MSGQ', JSON.stringify(message), function(err, reply){
if(err){
console.log('lpush message error :' + err);
}else{
console.log('lpush message success');
}
});


消费者实现代码

var redisCli = require('./app/libs/redis');
var clientBlocking = redisCli.duplicate();

var brpop = function() {
clientBlocking.brpop("MSGQ", 0, function(err, repl) {
ins_brpop();
//处理消息
messageHandle(repl[1]);
});
};

brpop();


3、主要原理

生产者实现没有什么可说,熟悉redis的人知道,只是将接收到的消息以字符串的形式存进redis的名为MSGQ的队列中,主要是消费者实现,这里用到了brpop阻塞式获取队列中的消息,如果MSGQ队列中没有消息,进程将会被阻塞,直到MSGQ队列中出现消息且还消费者进程获取到消息, 才会释放阻塞,brpop还可以设置阻塞时间,clientBlocking.brpop(“MSGQ”, 0, function(err, repl)第二个参数便是设置阻塞时间,如果超过该时间长度,消费者进程也会被释放。当然设置为0时,就只有消费者进程获取到消息才会被释放。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: