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
相关文章:
威客平台建站流程解析:高效搭建教程与设计优化方案
建站之家VIP精选网站模板与SEO优化教程整合指南
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
广德云建站网站建设方案与建站流程优化指南
制作表格网站有哪些,线上表格怎么弄?
linux top下的 minerd 木马清除方法
如何通过老薛主机一键快速建站?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
建站上市公司网站建设方案与SEO优化服务定制指南
太平洋网站制作公司,网络用语太平洋是什么意思?
建站之星如何通过成品分离优化网站效率?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
Swift中循环语句中的转移语句 break 和 continue
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
如何基于云服务器快速搭建网站及云盘系统?
平台云上自主建站:模板化设计与智能工具打造高效网站
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
建站主机无法访问?如何排查域名与服务器问题
如何通过网站建站时间优化SEO与用户体验?
视频网站制作教程,怎么样制作优酷网的小视频?
网站制作公司排行榜,四大门户网站排名?
黑客如何通过漏洞一步步攻陷网站服务器?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
如何快速查询域名建站关键信息?
深圳网站制作的公司有哪些,dido官方网站?
金*站制作公司有哪些,金华教育集团官网?
建站之星如何快速更换网站模板?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
建站之星如何保障用户数据免受黑客入侵?
C#怎么使用委托和事件 C# delegate与event编程方法
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
建站主机选购指南:核心配置优化与品牌推荐方案
如何使用Golang安装API文档生成工具_快速生成接口文档
建站之星展会模板:智能建站与自助搭建高效解决方案
全景视频制作网站有哪些,全景图怎么做成网页?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
海南网站制作公司有哪些,海口网是哪家的?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
如何使用Golang table-driven基准测试_多组数据测量函数效率
建站org新手必看:2024最新搭建流程与模板选择技巧
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
如何用PHP快速搭建高效网站?分步指南
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
建站之星安装后如何自定义网站颜色与字体?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
家具网站制作软件,家具厂怎么跑业务?
红河网站制作公司,红河事业单位身份证如何上传?
*请认真填写需求信息,我们会在24小时内与您取得联系。