消息中间件MQ基础理论知识
欢迎转载,转载请注明出处:http://www.cnblogs.com/lidabnu/p/5723280.html
消息中间件已经流行很长时间,一般情况下,不需要自己来从头研发、设计消息中间件,所以基础知识的目的是了解消息中间件解决什么问题、如何评估衡量消息中间件,以及掌握基本的相关术语。
专业术语
- 消息:一种需要跨系统传递的数据结构
- 生产者:产生消息的系统
- 消费者:消费消息的系统
- Broker:消息中转角色,负责消息的存储和转发,JMS规范中叫做Provider
应用场景
总结了一下,消息中间件用于解耦生产者与消费者,现在的理解,主要是降低生产者对消费者的“了解程度或要求程度”,具体来看:
- 生产者不知道也不关心消费者是谁,不知道也不关心消费者是不是可能减少或者增多——我都不知道你是谁
- 生产者知道消费者都有谁,但是消费者的技术实现方式完全不同:例如异构系统的集成——我知道你是谁,但是我对你怎么实现没啥要求
- 生产者与消费者的系统质量属性要求不同或已支持的质量属性程度不同:——我知道你是谁,但是我对你实现的好坏没啥要求
- 响应时间的要求不同:例如订单提交操作,生产者需要及时的响应最终用户,而订单的处理可以有相对较长的延时。
- 可用性的不同:例如与某个外部系统集成,该外部系统的可用性相对不高,则可使用消息中间件来屏蔽此种不同。
消息中间件本身实现要解决的问题
从上面的应用场景来看,消息中间件需要解决以下问题,或者说要具备以下特性
- 我不知道你是谁:支持发布-订阅模式,即支持动态的扩展和缩小消息消费者的范围
- 我知道你是谁,我对你怎么实现没啥要求:与消费者、生产者的通信方式平台无关,提供多种技术的接入支持
- 我知道你是谁,我对你实现的好坏没啥要求:
- 具备足够的消息堆积能力:对应于消费者挂了
- 对消息“至少消费一次”的保证:对应于消费者拿走一条消息后还没消费完就挂了
除上述要求外,还有一些通用的质量属性要求:
- 高性能
- 性能可伸缩
- 可靠性:主要指消息的可靠性,各种情况下不应丢消息
- 高可用:自身不能随便宕机
- 易用性/可维护性:
- API易用
- 部署容易
- 运维管理容易:便于与已有监控系统集成;便于细粒度管理消息中间件中的各种消息
以及一些异步化(消息中间件实质上是一种同步变异步)后所要解决的问题:
- 消息顺序性保证:先生产的消息需要先消费,某些场景下是必须的
最后,上个学习过程中的脑图:
消息中间件MQ基础理论知识的更多相关文章
- 消息中间件 MQ
复制粘贴于:https://blog.csdn.net/wqc19920906/article/details/82193316 一.消息中间件相关知识 1.概述 消息队列已经逐渐成为企业IT系统内部 ...
- 消息中间件MQ详解及四大MQ比较
一.消息中间件相关知识 1.概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手段之一.当今市面上有很多主流 ...
- 消息中间件MQ的学习境界和路线
在<深入理解Java类加载机制,再也不用死记硬背了>里我提到了对于一门语言的"会"的三个层次.本篇将以知识地图的形式展现学习消息中间件MQ各个层次要掌握的内容. 知识地 ...
- java基础理论知识的一些总结
在学习Java初期,由于我们是刚开始接触Java,我们不仅需要牢牢掌握Java的基础理论知识,来为我们后面对Java更深层次的学习打好基础,而且我们需要养成编程人的思想习惯.来我们一起来探索Java基 ...
- 消息中间件MQ
消息中间件MQ:为方便预览,将思维导图上传至印象笔记,博客园直接上传图片受限于图片大小 https://app.yinxiang.com/shard/s24/nl/27262531/c3e137a5- ...
- MQ基础知识学习
之前听人提起了MQ协议,我就去稍微了解了一下什么是MQ,和MQ的一些基础性的知识. 什么是MQ呢? 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据 ...
- RabbitMQ系列(一)--消息中间件MQ如何去选择
MQ在项目中的应用很普遍,本人所在项目组使用的是ActiveMQ,但是后面介绍的RabbitMQ... 一.应用场景 1.异步处理 2.流量削峰.秒杀 3.日志处理,推荐kafka 4.应用解耦 二. ...
- HTTPS学习笔记一----HTTPS的基础理论知识
首先推荐一本书,<HTTP权威指南>我就是看这本书入门的,对http协议有了更好的理解,学习https的理论知识我认为需要了解以下几点,需要一步步的深入学习: 1.HTTPS的基本概念? ...
- Java基础理论知识
package domain; public class Person { private String name; private int age; private char gender; pub ...
随机推荐
- 安卓高手之路之java层Binder
很多人一提到Binder就说代理模式,人云亦云的多,能理解精髓的少. 本篇文章就从设计角度分析一下java层BInder的设计目标,以及设计思路,设计缺陷,从而驾驭它. 对于[邦德儿]的理解, 从通信 ...
- bzoj1264
表面上看这是一道LCS问题 LCS问题O(n2)的复杂度已经很优秀了 而这道题需要O(nlogn)以下的复杂度才能AC 所以我们要找经典问题的特殊性 特殊就在这两个串中,每个数字都是恰好出现5次 不难 ...
- maven install 跳过 测试 test
你可能想要配置 Maven 使其完全跳过单元测试. 可能你有一个很大的系统,单元测试需要花好多分钟来完成,而你不想在生成最终输出前等单元测试完成. 你可能正工作在一个遗留系统上面,这个系统有一系列的失 ...
- ELK之nginx日志分析图表创建
一.kibana面板介绍 Discover:查询数据Visualize:统计图表Dashboard:显示面板,添加相应的图表在面板中Settings:创建索引 二.图表创建 1.饼图创建 以创建一个状 ...
- android左右晃动动画(红包左右晃动)
TranslateAnimation animation = new TranslateAnimation(0, -5, 0, 0); animation.setInterpolator(new Ov ...
- android学习之BUG——The connection to adb is down, and a severe error has occured.
开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选&qu ...
- 文本编辑器 CKEditor 用法
最新文本编辑器,FCK升级版:CKEditor.NET CKEditor.NET.dll 版本:3.6.4.0 官方网址:http://ckeditor.com/ 效果图: 配置web.c ...
- 通过udl文件得到连接字符串
1.新建一个文件,文件名任意,扩展名为udl 2.双击打开这个udl文件 3.点下一步: 4.测试连接成功后点击确定 5.用记事本打开这个udl文件: 连接字符串就出来了
- 细说webpack之流程篇
引言 目前,几乎所有业务的开发构建都会用到 webpack .的确,作为模块加载和打包神器,只需配置几个文件,加载各种 loader 就可以享受无痛流程化开发.但对于 webpack 这样一个复杂度较 ...
- [LeetCode] 16. 3Sum Closest 解题思路
Given an array S of n integers, find three integers in S such that the sum is closest to a given num ...