RabbitMQ 01 概述
什么是消息队列
进行大量的远程调用时,传统的Http方式容易造成阻塞,所以引入了消息队列的概念,即让消息排队,按照队列进行消费。
它能够将发送方发送的信息放入队列中,当新的消息入队时,会通知接收方进行处理,一般消息发送方称为生产者,接收方称为消费者。

这样所有的请求,都可以丢到消息队列中,再由消费者取出,不再是直接连接消费者的形式了,而是加了一个中间件,这是一种很好的解耦方案。并且在高并发的情况下,由于消费者能力有限,消息队列也能起到一个削峰填谷的作用,堆积一部分的请求,再由消费者来慢慢处理,而不会像直接调用那样请求蜂拥而至。
消息队列组件
ActiveMQ、RabbitMQ、RocketMQ、Kafka是目前主流的消息队列组件。它们的特点如下:

综合以上因素,这里选择RabbitMQ作为消息队列组件进行演示。原因如下:
- 吞吐量虽然不高,但中小型项目完全足够。
- 时效性强。延迟达到微妙级别,较同类产品延迟最低。
- 可用性强。提供了完善的高可用实现机制。
- 可靠性强。基本不会丢包。
- 并发能力强。基于Erlang开发,提供了丰富的交换机功能,性能好、延时低。
- 开源免费。没有使用成本,且社区活跃度高,产品稳定。
消息队列组件的功能和实现是大同小异的,学习好一个组件就可以做到一通百通,而且还有Spring Cloud Stream这样的消息队列连接组件,可以屏蔽各消息队列组件的差异性,使用统一的标准调用消息队列组件。
所以,想要掌握消息队列,从RabbitMQ入手是一个比较好的选择。
RabbitMQ
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
Rabbit科技有限公司开发了RabbitMQ,并提供对其的支持。
- 起初,Rabbit科技是LSHIFT和CohesiveFT在2007年成立的合资企业。
- 2010年4月被VMware旗下的SpringSource收购。
- RabbitMQ在2013年5月成为GoPivotal的一部分。
其特点如下:
- 拥有数万计的用户,是最受欢迎的开源消息队列之一,从T-Mobile到Runtastic,RabbitMQ在全球范围内用于小型初创企业和大型企业。
- 轻量级,易于在本地和云端部署,它支持多种消息协议。
- 可以部署在分布式和联合配置中,以满足大规模、高可用性要求。
- 在许多操作系统和云环境中运行,并为大多数流行语言提供了广泛的开发者工具。
运行过程:

- 生产者(Publisher):生产消息的终端。
- 信道(Channel):服务端和客户端连接都会使用一个Channel,再通过Channel去访问到RabbitMQ服务器。这里的通信协议不是http,而是amqp协议。
- 虚拟主机(Virtual Host):类似于环境隔离,不同环境都可以单独配置一个Virtual Host,每个Virtual Host可以包含很多个Exchange和Queue,每个Virtual Host相互之间不影响。
- 交换机(Exchange):根据请求,转发给相应的消息队列,每个队列都可以绑定到Exchange上,这样Exchange就可以将数据转发给队列了,可以存在很多个,不同的Exchange类型可以用于实现不同消息的模式。
- 消息队列(Queue):消息队列本体,生产者所有的消息都存放在消息队列中,等待消费者取出。
- 消费者(Consumer):消费消息的终端。
RabbitMQ 01 概述的更多相关文章
- kafka详解(01) - 概述
kafka详解(01) - 概述 定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域. 消息队列 MQ传统应用场景之异步处理 使用消 ...
- Zookeeper详解(01) -概述
Zookeeper详解(01) -概述 概念 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. Zookeeper从设计模式角度来理解,是一个基于观察者模式设计的分 ...
- 01 - 概述 VTK 6.0 迁移
摘要 对vtk版本4和5的管道机制重新架架构的主要目的是:迁移数据对象和算法对象中的管道执行逻辑到一个新集合的类中,我们称这个集合类叫executives.分离数据和执行模型的代码后,可以双双简化修改 ...
- Redis数据库 01概述| 五大数据类型
1.NoSQL数据库简介 解决应用服务器的CPU和内存压力:解决数据库服务的IO压力: ----->>> ① session存在缓存数据库(完全在内存里),速度快且数据结构简单: 打 ...
- Hive 01 概述、安装配置
概述 数据仓库:是一个面向主题的.集成的.不可更新的.随时间不变化的数据集合,它用于支持企业或组织的决策分析处理. 数据仓库的结构和建立过程: 数据源 数据存储及管理 ETL Extract 提取 T ...
- 【OracleDB】 01 概述和基本操作
实例概念: Oracle有一个特殊的概念 Oracle数据库 = 数据库 + Oracle文件系统 + Oracle实例 实例处理Oracle的请求,调用文件系统 然后返回结果响应给客户端 单实例和多 ...
- [RabbitMQ]01. 在 Win10 下通过 Docker 安装
目录 win10家庭版 win10专业版和企业版 1. 开启Hyper-v 2. 安装Toolbox工具 3. 运行安装文件 4. 启动docker 5. 安装rabbitmq 6. 网页访问rabb ...
- 【大数据面试】Flink 01 概述:包含内容、层次架构、运行组件、部署模式、任务提交流程、任务调度概念、编程模型组成
一.概述 1.介绍 对无界和有界数据流进行有状态计算的分布式引擎和框架,并可以使用高层API编写分布式任务,主要包括: DataSet API(批处理):静态数据抽象为分布式数据集,方便使用操作符进行 ...
- Headfirst JSP 01 (概述)
HTTP 协议 http 是tcp/ip上层协议, 如果你对这些网络协议还不是太熟悉, 下面提供一个非常简单的解释, tcp负责确保从一个网络节点向另一个网络节点发送文件能作为一个完整的文件到达目的地 ...
- Python学习笔记 :01概述
Python基础 首先推荐学习Python基础的教程和书籍 视频教程推荐南京大学张莉老师在cousera上的教程用Python玩转数据 入门教程<Python基础教程> 数据挖掘教程< ...
随机推荐
- 【LeetCode栈与队列#05】滑动窗口最大值
滑动窗口最大值 力扣题目链接(opens new window) 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口 ...
- 【Azure Function】Function本地调试时遇见跨域问题(blocked by CORS policy)
问题描述 在本地调试Azure Function时,遇见了跨域问题: Access to XMLHttpRequest at 'http://localhost:7071/api/HttpTrigge ...
- python 微信自动发图片,批量发送
自动发送批量的图片给微信联系人,可为自己的文件传输助手 已实现: 可设置发送时间间隔 发送图片数量 指定接收人 下载链接: python批量自动连发图片给微信好友自动发图片-Python文档类资源-C ...
- python使用selenium适配谷歌浏览器插件, chromedriver与chrome各版本及下载地址
python selenium使用,需要谷歌chromedriver.exe插件 chromedriver.exe插件是放在python的安装目录下(亲测,其它的都不对) 以下是chromedrive ...
- ConcurrentHashMap的put方法
使用JDK8 源码: public V put(K key, V value) { return putVal(key, value, false); } /** Implementation for ...
- XAF Blazor FilterPanel 布局样式
从上一篇关于ListView布局样式的文章中,我们知道XAFBlazor是移动优先的,如果想在PC端有更好的用户体验,我们需要对布局样式进行修改.这篇介绍在之前文章中提到的FilterPanel,它的 ...
- 案例7:将"picK"译成密码
密码规则:用当前字母后面的第五各字符来代替当前字符.比如字符'a'后面的第5个字符为'f', 则使用'f'代替'a'.编写程序,实现该功能. 示例代码如下: #define _CRT_SECURE_N ...
- 简单实用算法——位图算法(BitMap)
目录 算法原理 优点和缺点 算法实现(C#) 算法应用 参考文章 算法原理 BitMap的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素.由于采用了Bit为单位来存储数据 ...
- 2.4G无线音频一对多传输解决方案难点解析
前记 2.4G无线音频传输是一个非主流的应用,做这个的人 相对要比较少.但是,这个领域所涉及到的知识却不少,也就导致了这个领域是好入门,但是东西想做好特别难.这里涉及到声学,无线协议,电子,设 ...
- dbvisualizer不能执行pl/sql块
如果是如下语句: begin dbms_output.put_line('Hello World!'); end; 控制台会报错 解决方案:语句改写为如下 --/ begin ...