事件的发布和订阅 以及消息队列
来源:互联网 发布:金融大数据就业前景 编辑:程序博客网 时间:2024/06/07 00:00
摘自:http://m.blog.csdn.net/article/details?id=43529311
1 消息驱动架构 消息驱动架构(Event Driven Architecture) :
通过在底耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助事件消息的通信完成模块间合作,典型的EDA架构就是操作系统中常见的生产者消费者模式。
在大型网站中最常用的是分布式消息队列:
消息队列利用”发布—订阅者模式“工作,消息发送者发布消息,一个或者多个消息接受者订阅消息。消息发送者是消息源,在对消息进行处理后将消息发送至分布式消息队列,消息消息接受者从分布式消息队列获取该消息后继续进行处理。
松耦合:可以看到,消息发送者和消息接收者之间没有直接耦合,消息发送者将消息发送至分布式消息队列即结束对消息的处理,而消息接收者只需要从分布式消息队列获取消息后进行处理,不需要知道该消息从何而来。 消息接收者在对消息进行过滤、处理、包装后,构成一个新的消息类型,将消息继续发送出去,等待其他消息接收者订阅处理该消息。因此基于事件驱动的业务架构可以是一系列的流程。
2 分布式消息队列
首先跟一般队列一样是一种先进先出的数据结构。分布式消息队列可以看做将这种数据结构部署到独立的服务器上,通过远程访问接口使用分布式消息队列,进行消息存储操作,进而实现分布式的异步调用,基本原理如图:
如上图所示,我们可以明确三个步凑: ①消息生产者应用程序通过远程访问接口将消息推送给消息队列服务器,消息队列服务器将消息写入本地内存队列后马上返回成功响应给消息生产者。 ②消息队列服务器根据消息订阅列表查找订阅该消息的消费者应用程序,将消息队列中的消息按照先进先出的原则将消息通过远程通信接口发送给消费者应用程序; ③消费者应用程序接收到推送过来的消息之后进行相关的一系列处理,过程终止;伸缩性:将新服务器加入到分布式消息队列集群中,通知生产者服务器更改消息队列服务列表即可。可用性:为了避免消费者进程处理缓慢,分布式消息服务器内存空间不足的问题,如果内存队列已满,会将消息写入磁盘,消息推送模块在将内存队列中的消息处理完后,将磁盘内容加载到内存队列继续处理。 为了避免消息队列服务器宕机造成消息丢失,可以将消息成功发送到消息队列的消息存储在消息生产者服务器,等消息真正被消息消费者服务器处理后才删除消息。 消息队列服务器宕机,生产者选择分布式消息队列服务器中的其他机器。3 ”发布/订阅“模式 “发布/订阅”模式包含两种角色,分别是发布者和订阅者。订阅者可以订阅一个或若干个频道(channel),而发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都会收到此消息。 对任务 ”发布/订阅“模式很容易想到可以 使用消息队列实现的,Redis中就包含发布订阅模式的命令。
- 事件的发布和订阅 以及消息队列
- redis的消息队列和发布订阅demo
- 消息队列点对点和发布订阅区别
- redis消息队列订阅发布
- 使用Redis构建消息队列和发布订阅系统
- 同时消费队列和发布订阅两类型消息
- jedis的消息订阅和发布实例
- redis 消息发布订阅与消息队列
- 【C#】Event事件的订阅和发布
- JS事件发布和订阅的原理
- 深入biztalk消息以及消息订阅发布路由机制(三)-消息发布和路由
- 深入biztalk消息以及消息订阅发布路由机制(三)-消息发布和路由
- 深入biztalk消息以及消息订阅发布路由机制(四)-消息的轮询和执行
- 消息队列及发布/订阅模式
- 消息队列模式:点对点 与 发布订阅
- redis 消息队列 发布、订阅模式
- redis 消息订阅和发布
- Redis消息的发布/订阅
- 毕业设计那点事 — 源码安装Mysql
- Python Numpy学习笔记
- Spring第一天
- Maven项目中使用jetty启动项目[今后会不定期更新矫正本文]
- Python学习之循环
- 事件的发布和订阅 以及消息队列
- 支付宝支付-扫码支付详解
- Docker常用命令(非swarm模式)
- hdu I Hate It (线段树裸题)
- 转:有关常量的知识点
- android:fitsSystemWindows属性的用法
- 使用Android studio移植FFmpeg3.3进行转码
- mybatis log4j打印sql
- 排队(line)——2015年南海区青少年信息学奥林匹克竞赛试题(小学甲组)