node.js+redisメッセージキュー
新しいプロジェクトではredisのメッセージキュー機能を使用して、比較的時間がかかることやリソースが消費されることを処理しているので、redisのメッセージキューメカニズムを理解しました.
redisではこれがパブリケーション(pub)とサブスクリプション(sub)となる.
基本プロセス:
送信者(情報を送信するクライアント)は、特定の受信者(情報を受信するクライアント)に情報を直接送信するのではなく、チャンネル(channel)に情報を送信し、チャンネルによってこのチャンネルに興味のあるすべての購読者に情報を転送する.
しかし軽量級実現であったため、永続化はなかった.
例:
publisher.js
subscriber.js
これにより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