node.js+redis消息队列
2014-10-17 11:56
661 查看
因为新的项目中使用了redis的消息队列功能去处理一些比较耗时或者耗资源的事情,所以了解了一下redis的消息队列机制。
在redis中这被成为发布(pub)与订阅(sub)。
基本流程:
发送者(发送信息的客户端)不是将信息直接发送给特定的接收者(接收信息的客户端),而是将信息发送给频道(channel),然后由频道将信息转发给所有对这个频道感兴趣的订阅者。
但是因为是轻量级实现,所以没有持久化。
例子:
publisher.js
var redis = require("redis");
try{
var client = redis.createClient(6379, "10.0.192.27");
client.on(
"error",
function(err){
console.log("err"+err);
}
);
client.on('ready',
function(){
client.publish('testFirst',"hi! first!");
client.publish('testSecond',"hi! second!");
client.end();
}
);
}
catch(e){
console.log("err:"+e);
}
subscriber.js
var sys = require("sys");
try{
var client = require("redis").createClient(6379, "10.0.192.27");
sys.puts("waiting for messages...");
client.on(
"error",
function(err){
console.log("err"+err);
}
);
client.subscribe("testSecond");
client.on('subscribe',
function(channel,count){
console.log("channel:" + channel + ", count:"+count);
}
);
client.on('message',
function(channel,message){
console.log("channel:" + channel + ", msg:"+message);
}
);
client.on('unsubscribe',
function(channel,count){
console.log("channel:" + channel + ", count:"+count);
}
);
} catch(e){
console.log("err:"+e);
}
这样启动subscrib端,会出现下面的信息
waiting for messages...
channel:testSecond, count:1
然后启动publisher端,则subscrib端会接受到testSecond频道发过来的消息了。
waiting for messages...
channel:testSecond, count:1
from: testSecond / message: hi! second!
channel:testSecond, msg:hi! second!
参考:
http://blog.sina.com.cn/s/blog_62b832910100xok2.html
在redis中这被成为发布(pub)与订阅(sub)。
基本流程:
发送者(发送信息的客户端)不是将信息直接发送给特定的接收者(接收信息的客户端),而是将信息发送给频道(channel),然后由频道将信息转发给所有对这个频道感兴趣的订阅者。
但是因为是轻量级实现,所以没有持久化。
例子:
publisher.js
var redis = require("redis");
try{
var client = redis.createClient(6379, "10.0.192.27");
client.on(
"error",
function(err){
console.log("err"+err);
}
);
client.on('ready',
function(){
client.publish('testFirst',"hi! first!");
client.publish('testSecond',"hi! second!");
client.end();
}
);
}
catch(e){
console.log("err:"+e);
}
subscriber.js
var sys = require("sys");
try{
var client = require("redis").createClient(6379, "10.0.192.27");
sys.puts("waiting for messages...");
client.on(
"error",
function(err){
console.log("err"+err);
}
);
client.subscribe("testSecond");
client.on('subscribe',
function(channel,count){
console.log("channel:" + channel + ", count:"+count);
}
);
client.on('message',
function(channel,message){
console.log("channel:" + channel + ", msg:"+message);
}
);
client.on('unsubscribe',
function(channel,count){
console.log("channel:" + channel + ", count:"+count);
}
);
} catch(e){
console.log("err:"+e);
}
这样启动subscrib端,会出现下面的信息
waiting for messages...
channel:testSecond, count:1
然后启动publisher端,则subscrib端会接受到testSecond频道发过来的消息了。
waiting for messages...
channel:testSecond, count:1
from: testSecond / message: hi! second!
channel:testSecond, msg:hi! second!
参考:
http://blog.sina.com.cn/s/blog_62b832910100xok2.html
相关文章推荐
- nodejs+redis以最少的代码实现消息队列
- 如何使用NODEJS+REDIS开发一个消息队列
- 使用NODEJS+REDIS开发一个消息队列以及定时任务处理
- 基于Redis的简单消息队列模块(Node.js)
- Node.js + Redis Sorted Set 实现简单的任务队列
- nodejs+socketio+redis 简单消息推送实例(一)
- nodejs+socketio+redis实现前端消息实时推送
- 构建基于redis+gearman+nodejs 的消息推送系统
- Node.js + Redis Sorted Set实现任务队列
- Node.Js+Redis+Socket.IO 实现 聊天室或推送消息
- nodejs+socketio+redis实现前端消息实时推送
- nodejs+express+websocket+redis实现消息订阅系统
- node.js 与 redis 与 express 和session协同工作
- node.js的redis模块样例
- node.js 访问redis数据库,pub/sub
- Node.JS平台上的数据库Redis,MongoDB,HBASE,MySQL
- 使用Node.js和Redis实现push服务
- nodejs+redis
- 使用git管理nodejs+socket.io+redis+juicer+waterfall+ubuntu+aws ec2开发网站
- 使用git管理nodejs+socket.io+redis+juicer+waterfall+ubuntu+aws ec2开发网站