redis的客户端有很多,这次用它的pub/sub发布与订阅我选择了StackExchange.Redis,发布与订阅大家应该很清楚了,首先一个订阅者,订阅一个服务,服务执行一些处理程序(可能是写个日志,插入个数据,发个email)然后当另一个项目的某个业务发布这个服务后,被订阅的程序将会被执行,这个听起来很有意思,redis有好的实现了这个pub/sub功能。

看一下结构图

Sub订阅(消息消费者)

对于订阅方,这里类似于一个服务,它会长期运行着,被启动后动态订阅一些服务进来,以便以后再被其它服务调用

        //sub a function in A-projectPubSubManager.Instance.Subscribe("UserLog", (msg) =>{//订阅者处理自己的业务逻辑,这相关于队列服务要干的事
                Console.WriteLine(msg);});

Pub发布(消息生产者)

而对于其它项目,如A网站,它可能在被在POST动作后发布这个UserLog的服务,这时上面的订阅方将会消费它(消费者模式),或者服务代码被执行!

     [HttpPost]public ActionResult Index(string user){PubSubManager.Instance.Publish("UserLog", user + "这个用户提交表单了");return View();}

对于一直运行的服务,将会收到来自不同项目的消息,而它只负责消费它!

Lind.DDD.PublishSubscribe

封装了一些标准的pub/sub方法,它可以有多种实现方法,本例使用redis这个中间件

   /// <summary>/// 发布订阅的接口规则/// </summary>public interface IPubSub{/// <summary>/// 发布,有顺序,对象源是字符串/// </summary>/// <param name="channel"></param>/// <param name="value"></param>void Publish(string channel, string value);/// <summary>/// 订阅,对象源是字符串/// </summary>/// <param name="channel"></param>/// <param name="action"></param>void Subscribe(string channel, Action<string> action);/// <summary>/// 异步发布,无顺序,对象源是字符串/// </summary>/// <param name="channel"></param>/// <param name="value"></param>void PublishAsync(string channel, string value);/// <summary>/// 异步订阅,无顺序,对象源是字符串/// </summary>/// <param name="channel"></param>/// <param name="action"></param>void SubscribeAsync(string channel, Action<string> action);/// <summary>/// 发布,有顺序,对象源是Byte[]/// </summary>/// <param name="channel"></param>/// <param name="value"></param>void PublishByte(string channel, byte[] value);/// <summary>/// 订阅,对象源是Byte[]/// </summary>/// <param name="channel"></param>/// <param name="action"></param>void SubscribeByte(string channel, Action<byte[]> action);/// <summary>/// 异步发布,有顺序,对象源是Byte[]/// </summary>/// <param name="channel"></param>/// <param name="value"></param>void PublishByteAsync(string channel, byte[] value);/// <summary>/// 异步订阅,对象源是Byte[]/// </summary>/// <param name="channel"></param>/// <param name="action"></param>void SubscribeByteAsync(string channel, Action<byte[]> action);/// <summary>/// 发布,有顺序,对象源是泛型对象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="channel"></param>/// <param name="value"></param>void Publish<T>(string channel, T value);/// <summary>/// 订阅,对象源是泛型对象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="channel"></param>/// <param name="action"></param>void Subscribe<T>(string channel, Action<T> action);/// <summary>/// 异步发布,有顺序,对象源是泛型对象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="channel"></param>/// <param name="value"></param>void PublishAsync<T>(string channel, T value);/// <summary>/// 异步订阅,对象源是泛型对象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="channel"></param>/// <param name="action"></param>void SubscribeAsync<T>(string channel, Action<T> action);/// <summary>/// 取消指定订阅/// </summary>/// <param name="channel"></param>void UnSubscribe(string channel);/// <summary>/// 取消所有订阅/// </summary>/// <param name="channel"></param>void UnSubscribeAll();}

本文转自博客园张占岭(仓储大叔)的博客,原文链接:Redis学习笔记~分布式的Pub/Sub模式,如需转载请自行联系原博主。

Redis学习笔记~分布式的Pub/Sub模式相关推荐

  1. Redis 学习笔记八:集群模式

    Redis 学习笔记八:集群模式 作者:Grey 原文地址: 博客园:Redis 学习笔记八:集群模式 CSDN:Redis 学习笔记八:集群模式 前面提到的Redis 学习笔记七:主从复制和哨兵只能 ...

  2. Redis 学习笔记十 发布者订阅者模式与生产者消费者模式

    消息队列有两种场景 生产者消费者:一个消息只能有一个消费者 发布者订阅者:一个消息可以被多个消费者收到 redis从2.0版本开始支持pub/sub. 而Producer/Consumer是借助于re ...

  3. Redis学习笔记---Redis的模式订阅与退订

    Redis学习笔记-Redis的模式订阅与退订 1.发布订阅简介 发布订阅是一种通信的模式,Redis提供了发布订阅功能,可以用于消息的传输 Redis的发布订阅机制包括三个部分,publisher( ...

  4. Redis学习笔记1-理论篇

    目录 1,Redis 数据类型的底层结构 1.1,Redis 中的数据类型 1.2,全局哈希表 1.3,数据类型的底层结构 1.4,哈希冲突 1.5,rehash 操作 2,Redis 的 IO 模型 ...

  5. Redis学习笔记(B站狂神说)(自己总结方便复习)

    Redis学习笔记B站狂神说 redis: 非关系型数据库 一.NoSQL概述 1.为什么要用Nosql 1.单机Mysql的年代 思考一下,这种情况下:整个网站的瓶颈是什么? 1.数据量如果太大,一 ...

  6. Redis(学习笔记)

    Redis学习笔记 1.NoSQL数据库 1.1解决的问题 1.1.1解决CPU及内存压力 1.1.2解决IO压力 1.2NoSQL数据库概述 1.2.1什么是NoSQL数据库 1.2.2适用与不适用 ...

  7. StackExchange.Redis学习笔记(五) 发布和订阅

    StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...

  8. Redis学习笔记(五)——持久化及redis.conf配置文件叙述

    对于日常使用来说,学习完SpringBoot集成Redis就够我们工作中使用了,但是既然学习了,我们就学习一些Redis的配置及概念,使我们可以更深层次的理解Redis,以及增强我们的面试成功概率,接 ...

  9. Redis学习笔记(实战篇)(自用)

    Redis学习笔记(实战篇)(自用) 本文根据黑马程序员的课程资料与百度搜索的资料共同整理所得,仅用于学习使用,如有侵权,请联系删除 文章目录 Redis学习笔记(实战篇)(自用) 1.基于Sessi ...

最新文章

  1. Unity3d游戏开发之漫游场景的制作
  2. Intuit的Alex Balazs访谈
  3. xcode更新之后插件失效的解决办法
  4. linux关机方法有哪些?有何区别_Linux下判断是否正常关机的一个简单方法
  5. Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 完美解决(tomcat error)
  6. Hadoop之HDFS应用
  7. python multithreading_操作系统OS,Python - 多进程(multiprocessing)、多线程(multithreading)...
  8. MFC中模态对话框和非模态对话框的差别
  9. 黄轩成为QQ阅读新代言人 变身“队长”号召网友 “组队读书”
  10. JAVA团队开发手册 - 2.代码管理
  11. python可打印字符_测试一个python字符串是否可打印
  12. 可编程逻辑控制器类毕业论文文献都有哪些?
  13. CSS - less
  14. 三星s9刷android9,三星S9港版安卓9rom系统线刷包:TGY-G9600ZHU5CSG8-刷机之家
  15. 手机科学计算机xy怎么用,如何使用科学计算器
  16. SAP MM 采购订单中“Delivery Completed“ Indicator
  17. 东大计算机硕士奖学金,计算机科学与技术学院2018级硕士研究生学业奖学金评定情况.PDF...
  18. mac mysql 没有my.cnf_mac下mysql配置my.cnf无效
  19. noise levels descript
  20. 【大数据技术】实验4:熟悉Spark基础编程

热门文章

  1. python 发起HTTP请求
  2. Lattice 的 Framebuffer IP核使用调试笔记之datasheet笔记
  3. c++ 读取文件 最后一行读取了两次
  4. Android 绑定远程服务出现 Not Allowed to bind service
  5. html中dd dt的效果,html中dt dd
  6. c语言支持默认参数吗,嵌入式C语言可以带“默认参数”的函数吗
  7. 工业机器人 扬州 江都_扬州市14家企业获批2019年江苏省示范智能车间
  8. java for循环的这种写法怎么理解:for (; ; ) {},
  9. h2 mysql 兼容_H2内存数据库对sql语句的支持问题 sql放到mysql数据库中能跑
  10. 100个网络基础知识,赶紧收藏吧!