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. 前言 发布订阅者模式是为了发布者和订阅者之间避免产生依赖关系,发布订阅者之间的订阅关系由一个中介列表来维护.发 ...
随机推荐
- 【javascript】javascript设计模式之工厂模式
1.要解决的问题 2.如何实现 3.与构造函数的区别 4.总结 1.要解决的问题 工厂模式通常用于重复创建相似对象,提供动态创建对象的接口. 2.工厂模式最为设计模式中构造模式之一,通常在类或类的静态 ...
- MySQL数据库(12)----ALL、ANY、SOME子查询
运算符 ALL 和 ANY 常与某个关系比较运算符结合在一起使用,以便测试列子查询的结果.它们会测试比较值与子查询返回的全部或部分值是否匹配.例如,当比较值小于或等于子查询返回的每个值时,<= ...
- Kafak Confluent
- html5 移动端开发
移动端开发总结 目录 1.手机与浏览器 2.Viewport(视窗) 3. 媒体查询 4.px,em,rem,pt 5.设备像素比devicePixelRatio 6.移动web中的图标及字体 ...
- 工具Sequel Pro简介
从图中可以看到,sequel工作界面主要分成三部分,左边侧边显示的是当前所连接的数据库中存在的数据表,右侧上半部分则是用于写sql的地方,在Mac环境下按command+R键会执行你所写的sql,右侧 ...
- ActiveMQ queue 代码示例
生产者: package com.111.activemq; import javax.jms.Connection; import javax.jms.ConnectionFactory; impo ...
- visual studio 2017安装教程以及各类问题解决方案
文章的关键词和所含教程: VS2017安装/visual studio 2017安装/Xamarin/Android for visual studio 2017/VS2017找不到网站/VS2017 ...
- 10个值得深思的PHP面试题
第一个问题关于弱类型 $str1 = 'yabadabadoo'; $str2 = 'yaba'; if (strpos($str1,$str2)) { echo "/"" ...
- 10G client连接数据库
tnsnames.ora文件中的名字一定要顶格写(前面不留空格),不然连接时会如下报错. 已使用的参数文件:F:\oracle\product\10.2.0\client_1\network\admi ...
- Iptables教程
iptables防火墙简介 Iptables也叫netfilter是Linux下自带的一款免费且优秀的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入.流出.流经服务器的数据包进行精 ...