【RabbitMQ 一】RabbitMQ简介、消息中间件、MQ的作用

news/2024/5/19 18:42:42

RabbitMQ简介

很多介绍RabbitMQ的地方,上来就说这是一种消息中间件(Message Queue Middleware)。对于一些新手或者初级开发人员,“中间件”的概念并不是很清晰。那么什么是中间件呢?

1.什么是中间件

个人以为,中间件就是一种已经成熟的(可以在企业开发中使用的)、剥离了业务逻辑的可复用逻辑。这段逻辑能够提供某一方面很强大的功能,并且复用性很高,可以作为项目组件接入自己的服务。至于说是什么逻辑,那就得看是什么中间件了。

举个例子,我们其实在日常开发中经常能接触到一些中间件,只是我们用的时候并没有意识到他还有“中间件”这个称呼

  1. RPC中间件:大名鼎鼎的Dubbo
  2. 消息中间件:Apache的Kafka、我正在学习的RabbitMQ
  3. 缓存中间件:Redis
  4. 配置中间件:携程的Apollo、阿里的Nacos
  5. 存储中间件:阿里云的对象存储OSS

除了以上我用过的、知道的中间件,还有很多其他中间件不再一一列举

2.什么是消息中间件

先看MQ的全称是Message Queue Middleware,顾名思义,消息中间件的全称是“消息队列中间件”。

消息(Message)指的是在应用之间传递的数据。假设在微服务场景中,serviceA向serviceB以某种形式(http请求或者网关调用)发送了一段数据,这段数据就是消息。

既然MQ有一个Queue,说明其中必然存在一个队列。这个队列存放的自然就是消息。那么MQ的作用就是利用这个Queue,将serviceA与serviceB之间的数据交互与业务代码解耦。也就是在serviceA中不需要再去显式地写http请求或者网关调用serviceB的某个方法了,甚至serviceA压根都不用感知serviceB的存在.

3.MQ处理消息的方式

既然MQ用队列将业务代码和服务间的数据交互解耦了,那么自然支持异步的数据交互了。因为不再需要serviceA同步调用serviceB了,serviceA只需要调一下MQ,将消息写入MQ队列中。至于MQ什么时候将消息发给serviceB,那就跟serviceA完全没关系了。

MQ一般都支持以下两种异步消息处理机制:

  1. 点对点(Point to Point, P2P):消息生产者(serviceA)发送消息到MQ队列,消息消费者(serviceB)从MQ队列中接收消息
  2. 发布订阅(Pub/Sub):消息生产者(serviceA)向一个主题(topic)发布消息,订阅了这个topic的消费者(serviceB、serviceC…)就能从topic中收到消息。topic可以理解为消息的载体。

4.MQ的作用

MQ的功能有很多,但是最重要也最实用的就是这几条:

  1. 解耦:将业务代码与消息发送、接受机制剥离
  2. 存储:MQ队列能够存储消息,因此如果消息通知失败了,可以设计相应的补偿机制
  3. 削峰:在一些热点时段,如果上游突然发出很多消息,下游处理速度跟不上,很容易直接拉爆下游服务。MQ能够调节向下游推送消息的速度。这其实就是把消息先存在MQ,让下游慢慢处理
  4. 异步:因为使用MQ存储消息,所以MQ天然支持异步处理消息

http://www.mrgr.cn/p/12485506

相关文章

LSTM计算指示图

掌握网络结构组件构成 输入门、遗忘门、输出门候选记忆细胞记忆细胞隐藏状态ref:6.8. 长短期记忆(LSTM) — 《动手学深度学习》 文档 (gluon.ai)

websevere服务器从零搭建到上线(一)|阻塞、非阻塞、同步、异步

文章目录 数据准备(阻塞和非阻塞)、数据读写(同步和异步)小总结(陈硕老师的总结) 知识拓展同步执行实例异步编程实例 八股 数据准备(阻塞和非阻塞)、数据读写(同步和异步) 无论是什么样的IO都包含两个阶段:数据准备和数据读写。 我们的网络IO…

Honor of Kings QQ 1537937510

司空震到底要不要物理伤害高呢?还是法术伤害高呢?要不要出魔女和制裁引发的血案 先看下司空震的说明: 说下这个伙计为啥加QQ来骂我,因为这场当然最终是赢了,比赛里他一直强调司空震是物理伤害改版问题,然后…

关于冯诺依曼体系结构 和 操作系统(Operator System)的概念讲解(冯诺依曼体系结构,操作系统的作用等)

目录 一、冯诺依曼体系结构 二、操作系统 1. 概念 2. 设计操作系统的目的 3.系统调用和库函数概念 4.总结 三、完结撒❀ 一、冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。 截…

【一起深度学习——NIN】

NIN神经网络 原理图:代码实现:输出结果: 原理图: 代码实现: import torch from torch import nn from d2l import torch as d2ldef nin_block(in_channels, out_channels, kernel_size, strides, padding):return nn.…

worldclim 当前时期的生物气候变量数据存在的问题

bio2,3,4,6,7,9,12,13,14, 15,16,17,18,19 在格陵兰岛存在显著问题如下: 有明显的分割线。

cmake进阶:文件操作

一. 简介 前面几篇文章学习了 cmake的文件操作,写文件,读文件。文章如下: cmake进阶:文件操作之写文件-CSDN博客 cmake进阶:文件操作之读文件-CSDN博客 本文继续学习文件操作。主要学习 文件重命名,删…

商城系统推荐,如何找到一款可靠的商城系统?

如今,电商系统成为商家必不可少的营销工具,其系统在金融、外贸、零售等行业领域应用广泛。那么,作为初试水的企业又没有挑选电商系统的经验,如何找到拥有全功能、全渠道、可靠的网上商城系统呢? 我们可以先按电商系统…

MySQL技能树学习

在MySQL中,DDL(数据定义语言)用于定义数据库对象(如表、索引、视图等),DML(数据操纵语言)用于操作数据库中的数据(如插入、更新、删除数据),DQL&a…

读天才与算法:人脑与AI的数学思维笔记20_数学图灵测试

读天才与算法:人脑与AI的数学思维笔记20_数学图灵测试1. 数学图灵测试 1.1. 能不能将这种计算机证明语言翻译成易于与人交流的方式呢? 1.1.1. 剑桥大学的两位数学家蒂莫西高尔斯(Timothy Gowers)和莫汉加内萨林加姆(Mohan Ganesalingam)开展了此项研究 1.1.1.1. 他们决定…

百度语音识别开发笔记

目录 简述 开发环境 1、按照官方文档步骤开通短语音识别-普通话 2、创建应用 3、下载SDK 4、SDK集成 5、相关接口简单说明 5.1权限和key 5.2初始化 5.3注册回调消息 5.4开始转换 5.5停止转换 6、问题 简述 最近想做一些语音识别的应用,对比了几个大厂…

Fluent 区域交界面的热边界条件

多个实体域公共交界面的壁面,Fluent 会分拆为 wall 和 wall-shadow 的两个壁面,两者为配对关系,分别从属于一个实体域。 配对面可使用热通量、温度、耦合三类热边界条件,前两者统称为非耦合热边界条件。 耦合为配对面默认的热边界…

人工智能的发展将如何重塑网络安全

微信搜索关注公众号网络研究观,获取更多信息。 人们很容易认为人工智能 (AI) 真正出现是在 2019 年,当时 OpenAI 推出了 ChatGPT 的前身 GPT-2。 但现实却有些不同。人工智能的基础可以追溯到 1950 年,当时数学家艾伦图灵发表了题为“计算机…

【算法】滑动窗口——无重复字符的最长子串

本篇博客是一篇滑动窗口算法练习题——无重复字符的最长子串的思路详解,从最开始的暴力解法,优化以及怎么想到滑动窗口这种算法的一个详细思路过程,有需要借鉴即可。 目录 1.题目解读2.暴力求解3.暴力求解的优化4.题解代码示例 1.题目解读 题…

软考中级-软件设计师(九)数据库技术基础 考点最精简

一、基本概念 1.1数据库与数据库系统 数据:是数据库中存储的基本对象,是描述事物的符号记录 数据库(DataBase,DB):是长期存储在计算机内、有组织、可共享的大量数据集合 数据库系统(DataBas…

Angular基础-搭建Angular运行环境

这篇文章介绍了在Angular项目中进行开发环境搭建的关键步骤。包括node.js安装和配置、安装Angular CLI工具、安装angular-router、创建Angular项目等步骤。这篇文章为读者提供了清晰的指南,帮助他们快速搭建Angular开发环境,为后续的项目开发奠定基础。 …

EPYC 9B14(最强 Zen4 EPYC 2.6GHz 96c)简要上手感受

[CPU] EPYC 9B14(最强 Zen4 EPYC 2.6GHz 96c)简要上手感受 [复制链接] zlcrxp电梯直达 1# 发表于 2024-1-31 08:43 | 只看该作者 |只看大图 本帖最后由 zlcrxp 于 2024-1-31 16:47 编辑近期看到海鲜市场有EPYC 9B14,于是入手了一颗,由于入手时间比较短,目前先提供一些基本…

音视频开发4 FFmpeg windows 环境搭建,QT 安装,动态库的搜索路径

FFmpeg 为了让所有平台的开发者都能够学习到音视频开发的通用技术,本教程主要讲解跨平台的音视频开发库FFmpeg。其实只要你掌握了FFmpeg,也可以很快上手其他音视频开发库,因为底层原理都是一样的,你最终操作的都是一样的数据&…

opencv图片的平移-------c++

图片平移 cv::Mat opencvTool::translateImage(const cv::Mat& img, int dx, int dy) {// 获取图像尺寸int rows img.rows;int cols img.cols;// 定义仿射变换矩阵cv::Mat M (cv::Mat_<float>(2, 3) << 1, 0, dx, 0, 1, dy);// 进行仿射变换cv::Mat dst;cv…

HTTP协议相关文档

HTTP The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems. bing.com 翻译: 超文本传输协议 (HTTP) 是用于分布式的、协作的、超媒体信息系统的 应用程序级协议。IETF Internet Engi…