Redisにpub/subという便利そうな機能があったので使ってみました。
pub/subで他のプロセスに通知を送れる
pubというのはPublishのことで、subというのはSubscribeのことです。発行と購読とでも訳せばいいんでしょうか。
まず、Redisに「Subscribe(購読)します」と事前に宣言しておきます。続いて、Redisに対して「HogeHogeをPublish(発行)します」と誰かが言うと、すぐにSubscribeしている全てのプロセスに通知が発行されます。
何か更新があった際に、他のプロセスや他のサーバに簡単に通知を送れるので、いろいろと使い道は多そうです。
Node.jsからRedisを使えるようにする。
npmでredisのパッケージをインストールし、Node.jsからRedisを使えるようにします。
$ npm install redis
npm http GET https://registry.npmjs.org/redis
npm http 200 https://registry.npmjs.org/redis
npm http GET https://registry.npmjs.org/redis/-/redis-0.8.1.tgz
npm http 200 https://registry.npmjs.org/redis/-/redis-0.8.1.tgz
[email protected] ../node_modules/redis
簡単です。
Subscriber(購読者)の設定
続いて、Node.jsで、testチャネルをsubscribeするように設定します。
var subscriber = require('redis').createClient(6379, 'localhost');
subscriber.subscribe('test');
subscriber.on('message', function(channel, message) {
console.log('channel: ' + channel + ', message: ' + message);
});
これをsubscriber.jsと名付けて、実行しておきます。
$ node subscriber.js
これで、Redisのtestチャネルにpublishされると、その内容がログ出力されるようになります。
コマンドラインでRedisに対してpublishする
今回はpub/subを試してみるのが目的なので、別のターミナルからRedisのコマンドラインツールを叩きます。testチャネルに対して、HelloとかKONNICHIWAとかテキトーにpublishします。
$ redis-cli publish 'test' 'Hello!'
(integer) 1
$ redis-cli publish 'test' 'KONNICHIWA!'
(integer) 1
すると、subscriberのNode.js側では、それを受けて内容がログ出力されます。
$ node subscriber.js
channel: test, message: Hello!
channel: test, message: KONNICHIWA!
publishした瞬間にsubscriberに通知、publishした瞬間にsubscriberに通知・・・という動きを見ることができます。
これはなかなか楽しいし、使い道が色々考えられますね!
コメント