nodejs+redis以最少的代码实现消息队列
2017-10-19 16:42
946 查看
1、我的认识:
查阅资料,使用redis实现消息队列主要有两种方法
- 发布订阅模式
- 生产消费模式
这里主要说使用nodejs+redis来实现生产消费模式
2、代码实现:
生产者实现代码
消费者实现代码
3、主要原理
生产者实现没有什么可说,熟悉redis的人知道,只是将接收到的消息以字符串的形式存进redis的名为MSGQ的队列中,主要是消费者实现,这里用到了brpop阻塞式获取队列中的消息,如果MSGQ队列中没有消息,进程将会被阻塞,直到MSGQ队列中出现消息且还消费者进程获取到消息, 才会释放阻塞,brpop还可以设置阻塞时间,clientBlocking.brpop(“MSGQ”, 0, function(err, repl)第二个参数便是设置阻塞时间,如果超过该时间长度,消费者进程也会被释放。当然设置为0时,就只有消费者进程获取到消息才会被释放。
查阅资料,使用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时,就只有消费者进程获取到消息才会被释放。
相关文章推荐
- Node.js + Redis Sorted Set 实现简单的任务队列
- [示例] -- redis作为消息队列实现代码
- nodejs+socketio+redis实现前端消息实时推送
- PHP中利用redis实现消息队列处理高并发请求--简洁代码实现效果
- 基于Redis的简单消息队列模块(Node.js)
- nodejs+socketio+redis实现前端消息实时推送
- Node.js + Redis Sorted Set实现任务队列
- redis作为消息队列实现代码
- nodejs redis 发布订阅机制封装实现方法及实例代码
- nodejs+express+websocket+redis实现消息订阅系统
- 如何使用NODEJS+REDIS开发一个消息队列
- 使用NODEJS+REDIS开发一个消息队列以及定时任务处理
- Node.Js+Redis+Socket.IO 实现 聊天室或推送消息
- node.js+redis消息队列
- Java利用Redis实现消息队列的示例代码
- Redis的消息队列(N年前的项目代码)
- 深入解析桶排序算法及Node.js上JavaScript的代码实现
- 进程间通信:消息队列(代码实现)
- Redis实现简单消息队列
- Node.js巧妙实现Web应用代码热更新