每天学习一点点,成功增加一大步

NodeJs笔记:redis 的发布与订阅

NodsJS zhanghui 293℃

今天接到一个项目的任务是实现 nodeJs 对 redis 的消息队列的订阅,但之前没有写过这个需求不知如何写,于是呼在度娘搜索引擎寻找救命的稻草,但找来找去都是一些写得杂乱无章的大篇代码的文章,你让没有写过这个需求的人如何看懂你的意思。后来还是在阿里云上找到资料,大神就是大神写得让人一看便懂。

在使用之前你就要懂得 redis 和 nodeJs 的基本用法,前面的【NodeJs笔记:redis 的使用】博文中写过。在这里就简单的用一个例子来说明这个需求。

首先是建立链接

export const redisSubClient = redis.createClient(6379, "127.0.0.1", {auth_pass: "123456"});
redisSubClient.on("error", error => {
    console.log("Redis Error " + error);
});
export const redisPubClient = redis.createClient(6379, "127.0.0.1", {auth_pass: "123456"});
redisPubClient.on("error", error => {
    console.log("Redis Error " + error);
});

然后通过以下简单的代码就可实现

import {redisPubClient, redisSubClient} from "./common/config";

export class ReadRedis {
    subAndPub() {
        var key = 'chat';
        // 定义当接收到消息时要执行的回调函数
        redisSubClient.subscribe(key);
        redisSubClient.on('message', (channel, message)=>{
            console.log(`收到 ${channel} 频道的消息: ${message}`);
        });
        // 在sub订阅成功后,我们让pub向chat频道发送一个问候信息:
        redisSubClient.on('subscribe', (channel, count)=>{
            redisPubClient.publish(key, 'hi!');
        });
    }

}

运行的结果为:

> AliProductTs@1.0.0 test D:\nodejs\AliProductTs
> mocha ./build/test

0 passing (0ms)

收到 chat 频道的消息: hi!

这里要注意的是它的工作流程是:先开启订阅端,再由服务端发送被订阅的信息。

再例一个单纯是订阅工作的例子

var key = 'ProductSync';
// 客户端连接redis成功后执行回调
redisSubClient.on("ready", () => {
    // 订阅消息
    redisSubClient.subscribe(key);
    console.log("订阅成功。。。");
});

redisSubClient.on("error", error => {
    console.log("Redis Error " + error);
});
// 监听订阅成功事件
redisSubClient.on('subscribe', (channel, count)=>{
    console.log("client subscribed to " + channel + "," + count + "total subscriptions");
});
// 收到消息后执行回调
redisSubClient.on('message', (channel, message)=>{
    console.log(`收到 ${channel} 频道的消息: ${message}`);
});
// 监听取消订阅事件
redisSubClient.on("unsubscribe", (channel, count) => {
    console.log("client unsubscribed from" + channel + ", " + count + " total subscriptions")
});

用简单的方式告诉不懂的人如何去实现这个需求多好,在阿里云中搜索到的这篇文章还有更多的信息可参考:

《Redis入门指南》一5.4 Node.js与Redis

转载请注明:隨習筆記 » NodeJs笔记:redis 的发布与订阅