全网整合营销服务商

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

免费咨询热线: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 


相关文章: 浅谈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小时内与您取得联系。