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

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时,就只有消费者进程获取到消息才会被释放。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值