分布式--消息中间件
1.什么是消息中间件
消息中间件是指:利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,可以在分布式架构下扩展进程之间的通信。
2.消息中间件能做什么
消息中间件主要解决的就是分布式系统之间消息传递的问题,它能够屏蔽各种平台以及协议之间的特性,实现应用程序之间的协同。
使用消息中间件,主要有如下两个特点:①异步化 ②解耦。我们可以从如下两个实例来入手,具体了解消息中间件在项目中的具体使用场景。
场景一:电商平台用户注册功能
用户注册这一服务,并不单单只是向数据库中insert一条数据即可,有些时候比如我们使用邮箱来注册,还需要发送激活邮件等操作。新用户还有可能会给你发送新人红包、发送短信等来提示你注册成功等等操作。
我们从上图这个注册服务可以看到,信息入库、发送激活短信...等每一个操作都是独立的。同时,基于领域划分(请参考:领域驱动设(DDD))以后,发送邮件短信、发送新人红包、发送注册成功短信等都属于不同的子域。所以我们可以对这些子模块来异步化执行,类似于多线程并行处理的概念。
如何实现异步化呢?多线程当然可以实现,只是消息的持久化、消息的重发这些条件,多线程并不能满足。所以需要借助一些开源中间件来解决。而分布式消息队列就是一个非常好的解决办法,引入分布式消息队列以后,架构图就变成这样了(下图是异步消息队列的场景)。通过引入分布式队列,就能够大大提升程序的处理效率,并且还解决了各个模块之间的耦合问题。
具体步骤为:用户注册成功后,发送一条信息到消息中间件,其他的几个子域如果有需要的话,只需要订阅/关注该消息中间件,就能够实现异步化操作了。这就是分布式消息队列异步化 && 解耦 的一个场景。
注册接口并不依赖其他三个子域的操作的结果。成功或失败,与主流程是没有任何影响的。做解耦,只需要在当前功能关心核心领域即可,不需要关心其他子域,只需要保证其他子域的正确性即可。
假如说这里面每一部操作都需要消耗1s,按照基础一个Conntroller开发,将这4步都写在一个Controller中,整个注册过程就需要消耗4s才能响应给客户。使用消息中间件之后,则整个过程只需要消耗1s多,便能够响应给客户,明显缩短了响应时间,这就是异步化所带来的好处。
场景二:流量削峰(秒杀、抢购情景)
比如在电商平台的秒杀场景下,流量会非常大。通过消息队列的方式可以很好的缓解高流量的问题,异步的消息队列,可以通过排队的机制,来很好的解决这一问题。
具体步骤如下:①用户提交过来的请求,先写入到消息队列。消息队列是有长度的,如果消息队列长度超过指定长度,直接抛弃; ②秒杀的具体核心处理业务,接收消息队列中消息,并进行下一步处理。
其他场景使用:
消息中间件还有更多应用场景,比如在弱一致性事务模型中,可以采用分布式消息队列的实现最大能力通知方式来实现数据的最终一致性等等
3.常用的消息中间件有哪些
①ActiveMQ
ActiveMQ 是Apache出品,最流行的,能力强的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。官网:https://activemq.apache.org/
②RabbitMQ
AMQP协议的领导实现,支持多种场景。淘宝的MySQL集群内部有使用它进行通讯,OpenStack开源云平台的通信组件,最先在金融行业得到运用。官网:http://www.rabbitmq.com/
③ZeroMQ
史上最快的消息队列系统,这属于是一个类库,直接使用能不快吗。官网:https://zeromq.org/
④Kafka
Apache下的一个子项目 。特点:高吞吐,在一台普通的服务器上即可以达到10w/s的吞吐速率;完全的分布式系统。适合处理海量数据。官网:http://kafka.apache.org/
⑤RocketMQ
RocketMQ是阿里开源的消息中间件,目前已经捐献给Apache基金会。它是由Java语言开发的,具备高吞吐量、高可用性、适合大规模分布式系统应用等特点,经历过双11的洗礼,实力不容小觑。官网:http://rocketmq.apache.org/
其他一些消息中间件,使用也不是很多,这里就不再过多罗列了
END
分布式--消息中间件相关推荐
- 深入理解阿里分布式消息中间件
什么是分布式消息中间件 什么是分布式消息中间件? 对于分布式消息中间件,首先要了解两个基础的概念,即什么是分布式系统,什么又是中间件. 分布式系统: "A distributed syste ...
- 分布式消息中间件 : Rocketmq
简述 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 分布式消息中间件,主要是实现分布式系统中解耦.异步消息.流量销锋.日志处理等场景.生产中用的最 ...
- 分布式消息中间件中的一些概念(接上一篇的《什么是分布式消息中间件?》)...
接上一篇的<什么是分布式消息中间件?>,这一篇来介绍一下消息中间件相关的一些概念和专业术语. Topic 主题,从逻辑上讲一个Topic就是一个Queue,即一个队列:从存储上讲,一个To ...
- spring+springmvc+kafka分布式消息中间件集成方案
Honghu的消息服务平台已经抛弃了之前的ActiveMQ,改用高吞吐量比较大的Kafka分布式消息中间件方案: kafka消息平台使用spring+kafka的集成方案,详情如下: 1. 使用最高版 ...
- 基于RabbitMQ消息队列的分布式事务解决方案 - MQ分布式消息中间件实战
基于RabbitMQ消息队列的分布式事务解决方案 - MQ分布式消息中间件实战 参考文章: (1)基于RabbitMQ消息队列的分布式事务解决方案 - MQ分布式消息中间件实战 (2)https:// ...
- TubeMQ 万亿级分布式消息中间件
TubeMQ是腾讯在2013年自研的分布式消息中间件系统,专注服务大数据场景下海量数据的高性能存储和传输,经过近7年上万亿的海量数据沉淀,目前日均接入量超过25万亿条.较之于众多明星的开源MQ组件,T ...
- 分布式消息中间件 MetaQ 作者庄晓丹专访
MetaQ(全称Metamorphosis)是一个高性能.高可用.可扩展的分布式消息中间件,思路起源于LinkedIn的Kafka,但并不是Kafka的一个Copy.MetaQ具有消息存储顺序写.吞吐 ...
- 腾讯万亿级分布式消息中间件TubeMQ正式开源
TubeMQ是腾讯在2013年自研的分布式消息中间件系统,专注服务大数据场景下海量数据的高性能存储和传输,经过近7年上万亿的海量数据沉淀,目前日均接入量超过25万亿条.较之于众多明星的开源MQ组件,T ...
- 分布式消息中间件之RabbitMQ学习笔记[一]
写在前面 嗯,陆续的整理一些中间件的笔记 今天和小伙伴们分享RabbitMQ 相关笔记 博文偏理论,内容涉及: RabbitMQ的简单介绍 AMQP协议标准介绍 RabbitMQ Demo 食用方式: ...
- 分布式消息中间件设计
目录 1.什么是分布式消息中间件 1.1.单体架构 1.2.分布式系统架构 2.基于消息中间件的分布式系统架构 2.1.什么是消息中间件 2.2消息中间件概述 3.消息中间件的核心设计 3.1.本质 ...
最新文章
- 数据库连接客户端使用(db2,oracle,mysql)
- MyBatis-07MyBatis注解方式之@Select
- Java字节码指令简介
- 温故而知新!微信小程序的事件处理,吊打面试官系列!
- php页面添加链接,怎么给一个PHP密码访问页面加超链接
- html和c的区别,tn-s系统与TN-C的区别是什么
- 非线性优化库Ceres问题记录
- NUC1657 All in All【字符串匹配】
- Kaldi AMI数据集脚本学习6---转移模型(Transition Model)
- php颜色十六进制代码,如何通过PHP中的十六进制代码检索颜色的人名
- 美国转基因食品的生产现状
- DM7 达梦数据库 物理备份 相关概念说明
- List 集合排序 降序升序
- 树莓派智能小车c语言代码,树莓派智能小车开发详解
- 优秀员工评审表 模板
- 使用WebGL 自定义 3D 摄像头监控模型
- 用python 判断一个单链表是否有环
- 手把手教你搭建一个【文件共享平台】系列教程第二话——环境搭建
- 详解Yarn中三种资源调度器(FIFO Scheduler、Capacity Scheduler、Fair Scheduler)和配置自定义队列实现任务提交不同队列
- Linux环境下java安装、配置
热门文章
- 使用swiper实现视频和图片混合轮播
- C#窗体项目————影院售票系统
- EXCEL批量给多个单元格里指定字上色其他颜色
- Android音频格式转换,Android音视频系列(八):了解音频格式WAV以及与PCM的转换...
- 游侠原创:安全狗“服云”深度评测!
- js单线程,事件循环,微任务宏任务
- 5.19 利用图层组来管理图层 [原创Ps教程]
- TestNG入门指南
- DIN22 IPO OC双输入双输出单电源供电光电隔离转换器 输入/输出 3000VDC 五隔离 实现正负双向信号的隔离传输
- JDBC当中三个对象的理解