全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

nodejs redis 发布订阅机制封装实现方法及实例代码

 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小时内与您取得联系。