nodejs redis 发布订阅机制封装

最近项目使用redis,对publish 和 subscribe的使用进行了了解,并进行了封装。
var config = require('../config/config');
var log = require("./loghelp");
var redis = require("redis");
function initialclient(param) {
var option={ host: config.redis.host, port: config.redis.port};
if(param)
{
option=Object.assign(option,param);
}
redis.print
let client = redis.createClient(option);
client.on("error", function(err) {
log.error(err);
});
return client;
}
/*example:
* let channel="ryan";
redis.pubSub.registerHandlers("ryan",msg=> console.log(msg));
redis.pubSub.subscribe(channel);
redis.pubSub.publish(channel,"hello from chen");*/
class PubSub
{
constructor(){
this.sub=initialclient();
this.handlers=new Map();
this.subAction=(channle,message)=>{
let actions= this.handlers.get(channle)||new Set();
for(let action of actions)
{
action(message);
}
}
this.alredyPublishs=[];
this.subConnected=false;
}
publish(channel,message)
{
let action=()=>{
let pub=initialclient();
pub.publish(channel,message);
};
if(this.subConnected===false)
{
this.alredyPublishs.push(action);
}
else
action();
}
registerHandlers(channel,action)
{
var actions=this.handlers.get(channel)||new Set();
actions.add(action);
this.handlers.set(channel,actions);
}
subscribe(channel)
{
let self=this;
this.sub.subscribe(channel,function (err,reply) {
if(err)
log.error(err);
self.subConnected=true;
for(let publish of self.alredyPublishs)
publish();
console.log(reply);
});
this.sub.on("message", function (channel, message) {
self.subAction(channel,message);
});
}
tearDown()
{
this.sub.quit();
}
}
然后通过exports.pubsub=new PubSub() 将其暴漏,可保证是单例。在程序启动时,调用
registerHandlers 注册特定通道的处理逻辑,然后调用
subscribe 订阅通道。
在合适时机调用publish,这个机制可以实现分布式下所有客户端watch 同一个数据的更改。
本人全手工打造的dotnetcore webapi 框架,可实现快速开发。
地址:http://xiazai./201612/yuanma/WebApiCore-master().rar。
1 采用DDD模式开发,充血模型 2 添加Dapper扩展,默认实现增删改查基本操作。利用AutoMapper 做实体转换,减少重复劳动。 3 依赖注入融合Autofac,仓储层和应用层自动注入 4 实现JWT验证 5 加入swagger 文档 6 单元测试添加了xunit,MyMvc 可以方便对webapi测试 7 数据库版本控制
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# nodejs
# redis
# 封装
# 封装实例详解
# 封装如何实现
# 基于 Node.js 实现前后端分离
# Nodejs全栈框架StrongLoop推荐
# 在nodejs中使用swagger方式
# 进行了
# 将其
# 希望能
# 可以实现
# 谢谢大家
# 启动时
# 客户端
# 单元测试
# 应用层
# 文档
# 全手工
# error
# err
# return
# print
# assign
# createClient
# client
# channel
# constructor
相关文章:
浅谈Javascript中的Label语句
香港服务器网站卡顿?如何解决网络延迟与负载问题?
C++时间戳转换成日期时间的步骤和示例代码
建站主机系统SEO优化与智能配置核心关键词操作指南
如何快速生成ASP一键建站模板并优化安全性?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
如何用景安虚拟主机手机版绑定域名建站?
制作网站的公司有哪些,做一个公司网站要多少钱?
如何快速搭建个人网站并优化SEO?
如何在香港免费服务器上快速搭建网站?
公司门户网站制作流程,华为官网怎么做?
为什么Go需要go mod文件_Go go mod文件作用说明
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
如何获取开源自助建站系统免费下载链接?
视频网站制作教程,怎么样制作优酷网的小视频?
c++怎么用jemalloc c++替换默认内存分配器【性能】
岳西云建站教程与模板下载_一站式快速建站系统操作指南
如何在阿里云服务器自主搭建网站?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
名字制作网站免费,所有小说网站的名字?
Python路径拼接规范_跨平台处理说明【指导】
英语简历制作免费网站推荐,如何将简历翻译成英文?
免费视频制作网站,更新又快又好的免费电影网站?
网站制作需要会哪些技术,建立一个网站要花费多少?
如何快速上传自定义模板至建站之星?
如何构建满足综合性能需求的优质建站方案?
网站制作说明怎么写,简述网页设计的流程并说明原因?
建站之星备案流程有哪些注意事项?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
建站之星安装提示数据库无法连接如何解决?
电商平台网站制作流程,电商网站如何制作?
如何在腾讯云服务器上快速搭建个人网站?
宝塔新建站点报错如何解决?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
C#怎么使用委托和事件 C# delegate与event编程方法
头像制作网站在线制作软件,dw网页背景图像怎么设置?
如何通过wdcp面板快速创建网站?
建站之星×万网:智能建站系统+自助建站平台一键生成
建站之星多图banner生成与模板自定义指南
如何确认建站备案号应放置的具体位置?
如何快速搭建高效可靠的建站解决方案?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
制作营销网站公司,淘特是干什么用的?
建站之星免费版是否永久可用?
上海网站制作开发公司,上海买房比较好的网站有哪些?
实现虚拟支付需哪些建站技术支撑?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
怎么将XML数据可视化 D3.js加载XML
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
*请认真填写需求信息,我们会在24小时内与您取得联系。