C/S模式,发布/订阅模式和PUSH/PULL模式(上)
CS模式(客户端/服务器模式)
最场景的信息传递模式,也称为Request/Response模式,或者调用模式。http/https协议即此模式。因为最常用所以大家一般都比较熟悉,这里不重点讲了,大家请看图下图:

发布/订阅模式(Publish/Subscribe)
发布订阅模式相对于BS模式稍微难点,我们不妨先看一个生活中的小例子:

如果没有邮局会怎么样?毫无疑问出版社既要发行杂志又要把杂志投递给用户,不仅累而且极其低效!因为大部分时间都将耽误在投递上,发行杂志的事情还有肯能被耽误!此例子可以理解为生活中的"发布订阅模式"
理解完生活中的事例,我们再来看发布订阅模式在软件开发中的重要作用!我们先看下图:

这是一个新闻入库程序的实现的流程,我们来看看此流程有什么问题:
逻辑会越来越复杂:不停将新功能追加后面必然导致程序越来越复杂。
非异步流程:程序是串行执行的,只有确认推送成功后才会走到写入elasticsearch流程。意味着可能有进程等待,程序执行过程将会较长,甚至会超时。
不稳定:只要中间任何一个流程挂掉了,整个程序就挂了,无法走到后面的流程。
再看采用发布订阅模式处理流程:

可以看到新闻入库过程被简化了,只有新闻写入数据库和发布到kafka两个过程。其他的处理程序采用订阅kafka中的新闻消息来实现了各自功能,我们再来看看这样处理有什么好处:
新闻入库简化且几乎不再变更。
处理流程是异步的:新闻发布到kafka后就可以给用户返回新闻入库成功,用户体验好!后面的事情其他程序会异步去完成。
一个程序被拆分成多个程序,每个程序都不算复杂。
即使有一个程序(例如推送程序)挂掉了,其他程序依然可以稳定运行。
总结发布/订阅模式:

我们可以看到发布订阅模式有3个角色,分别是一个生产者,一个消息管理器,多个消费者,生产者将消息发布到消息管理器,而多个消息消费者则会订阅消息管理器中消费者发布的内容。这便是发布订阅模式的基本组成。
发布订阅模式的意义:
降低系统耦合性。
提供系统稳定性。
系统更加灵活
降低每个程序的复杂度
...
本节就先分析到这来了!
仁者见仁智者见智,欢迎大家评论指正!
分享或关注公众号的帅哥会越来越帅!美女会越来越美!

C/S模式,发布/订阅模式和PUSH/PULL模式(上)的更多相关文章
- RabbitMQ六种队列模式-发布订阅模式
前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅 [本文]RabbitMQ六种队列模式-路由模式RabbitMQ六种队列模式-主 ...
- 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_8.RabbitMQ研究-工作模式-发布订阅模式-生产者
Publish/subscribe:发布订阅模式 发布订阅模式: 1.每个消费者监听自己的队列. 2.生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将 ...
- 4.js模式-发布-订阅模式
1. 发布-订阅模式 var observe = (function(){ var events = {}, listen, trigger, remmove; listen = function(k ...
- 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_9.RabbitMQ研究-工作模式-发布订阅模式-消费者
消费者需要写两个消费者 定义邮件的类 复制以前的代码到邮件类里面进行修改 最上面 声明队列的名称和交换机的名称 监听修改为email 的队列的名称 手机短信接收端 复制一份email的接收端的代码 改 ...
- 观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 抽象主题(Subject):它把所有观察者对 ...
- java 观察这模式(发布订阅模式)
观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新. 发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息. 抽象 ...
- Asp.Net进阶/管家模式+发布订阅模式:练习
现在需要实现一个需求:我需要在一个窗体中发送一个信息,其余几个窗体都能同时接收到发送的消息. 1.界面:一个管家窗体,1个主窗体,2个订阅者窗体.其中管家窗体为启动窗体. 2.订阅:2个订阅窗体订阅主 ...
- Redis消息通知(任务队列和发布订阅模式)
Redis学习笔记(十)消息通知(任务队列和发布订阅模式) 1. 任务队列 1.1 任务队列的特点 任务队列:顾名思义,就是“传递消息的队列”.与任务队列进行交互的实体有两类,一类是生产者(produ ...
- 设计模式-发布订阅模式(javaScript)
1. 前言 2. 什么是发布订阅模式 3. 发布订阅优缺点 4. 举例 4. 总结 1. 前言 发布订阅者模式是为了发布者和订阅者之间避免产生依赖关系,发布订阅者之间的订阅关系由一个中介列表来维护.发 ...
随机推荐
- [SCOI2016]背单词——trie树相关
题目描述 Lweb 面对如山的英语单词,陷入了深深的沉思,”我怎么样才能快点学完,然后去玩三国杀呢?“.这时候睿智的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他的计划册是长这样的: ...
- 几个 h5页面效果和 自动 app 生成网站 微页
用MAKA.易企秀.兔展就够了,MAKA和兔展用户体验好些,易企秀广告有点丑,不过模板多一些. 至于交互类工具,iH5.Mugeda.Epub360这三个里面选一个就行. -------------- ...
- 解决 客户端连接 mysql5.7 Plugin 'mysql_native_plugin' is not loaded错误
进入mysql数据库,修改数据库的内容 1, use mysql; 2,update user set authentication_string="" where User= ...
- MapReduce两种执行环境介绍:本地测试环境,服务器环境
本地测试环境(windows):1.在windows下配置hadoop的环境变量2.拷贝debug工具(winutils.exe)到hadoop目录中的bin目录,注意winutils.exe的版本要 ...
- order by 多条件查询 case when
场景:在按照条件查询后,排序按照不同的条件排序,以及同一个条件 正序和倒序排序.可以考虑使用. 遇到的排序条件:按照直播的状态,根据条件排序.直播的状态包括:直播.置顶.预告.回放.过期预告.排序条件 ...
- file cycle
# Author:Alex# Date:2017.06.07# Version:3.6.0with open('james.txt') as jaf: data = jaf.readline() ja ...
- 使用MDScratchImageView实现刮奖效果
使用MDScratchImageView实现刮奖效果 https://github.com/moqod/iOS-Scratch-n-See 最终效果: 其实这是使用了别人的东西而已:) 源码: // ...
- Linux Reboot And Poweroff Command
1.Environment:RedHat Linux Enterprise 6+Vmware Workstation 12 Pro 2.Linux shutdown and restart comma ...
- 推送代码到GitHub上的两种方式
要想将本地Git上代码提交到GitHub可以使用两种协议进行提交,分别使用HTTPS和SSH两种协议,如下所示. 当使用HTTPS协议时,每次推送的时候都需要输入GitHub平台的用户名密码. ...
- 查看oracle数据库最近执行了哪些sql语句
SELECT b.sql_text, --content of SQL a.machine, --which machine run this code a.username, a.module, - ...