今天接到一个项目的任务是实现 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") });
用简单的方式告诉不懂的人如何去实现这个需求多好,在阿里云中搜索到的这篇文章还有更多的信息可参考:
转载请注明:隨習筆記 » NodeJs笔记:redis 的发布与订阅