RabbitMQ篇(基本介绍)

目录

一、简介

二、作用

三、AMQP协议

1. 简介

2. 核心概念

四、工作原理

五、工作模式

1. 普通模式

2. Worker模式

3. PubSub模式

4. Rounting模式

5. Topic模式

6. RPC模式

7. Publisher Confirms模式

六、基本结构

七、常见五个角色


一、简介

RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。

最初起源于金融系统,适用于对数据的一致性、稳定性和可靠性要求比较高的场景。

二、作用

缓解高并发场景的压力;对流量进行削峰;实现解耦;提高系统的可靠性

三、AMQP协议

1. 简介

AMQP高级消息队列协议(Advanced Message Queueing Protocol),是面向消息的中间件的开放标准应用层

协议,AMQP的特征是消息导向,排队,路由(包括点对点和发布和订阅),可靠性和安全性。

AMQP要求消息传递提供商和客户端的行为在不同供应商实现可互操作的情况下,以与SMTP,HTTP,FTP等相

同的方式创建了可互操作的系统。

AMQP协议是具有现代特征的二进制协议。一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协

议的一个开发标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中

间件不同产品,不同开发语言等条件的限制。

AMQP是一种二进制应用层协议,旨在有效地支持各种消息应用和通信模式。

2. 核心概念

AMQP协议模型

1、Server

又称作Broker,用于接受客户端的连接,实现AMQP实体服务;

2、Connection

连接,应用程序与Broker的网络连接;

3、Channel

网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表

一个会话任务;

3、Message

消息,服务器和应用程序之间传送的数据,有Properties和Body组成。Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body则是消息体内容,即我们要传输的数据;

仅仅创建了客户端到Broker之间的连接后,客户端还是不能发送消息的。需要为每一个Connection创建Channel,AMQP协议规定

只有通过Channel才能执行AMQP的命令。一个Connection可以包含多个Channel。之所以需要Channel,是因为TCP连接的建立

和释放都是十分昂贵的,如果一个客户端每一个线程都需要与Broker交互,如果每一个线程都建立一个TCP连接,暂且不考虑TCP

连接是否浪费,就算操作系统也无法承受每秒建立如此多的TCP连接。RabbitMQ建议客户端线程之间不要共用Channel,至少要保

证共用Channel的线程发送消息必须是串行的,但是建议尽量共用Connection。

4、Virtual Host

虚拟地址,是一个逻辑概念,用于进行逻辑隔离,是最上层的消息路由。一个Virtual Host里面可以有若干个Exchange和Queue,

同一个Virtual Host里面不能有相同名称的Exchange或者Queue;

Virtual Host是权限控制的最小粒度;

5、Exchange

交换机,用于接收消息,可根据路由键将消息转发到绑定的队列;

6、Binding:

Exchange和Queue之间的虚拟连接,Exchange在与多个Message Queue发生Binding后会生成一张路由表,路由表中存储着

Message Queue所需消息的限制条件即Binding Key。当Exchange收到Message时会解析其Header得到Routing Key,

Exchange根据Routing Key与Exchange Type将Message路由到Message Queue。Binding Key由Consumer在Binding

Exchange与Message Queue时指定,而Routing Key由Producer发送Message时指定,两者的匹配方式由Exchange Type决定

7、Routing Key:

一个路由规则,虚拟机可用它来确定如何路由一个特定的消息;

8、Queue:

也称作Message Queue,即消息队列,用于保存消息并将他们转发给消费者;

RabbitMQ整体架构图

四、工作原理

Broker:接收和分发消息的应用,RabbitMQ Server 就是 Message Broker

Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚 拟的分组中,类似于网络中的

namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个 vhost,每

个用户在自己的 vhost 创建 exchange/queue 等

Connection:publisher/consumer 和 broker 之间的 TCP 连接

Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候 建立 TCP Connection 的开

销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常

每个 thread 创 建单独的 channel 进行通讯,AMQP method 包含了 channel id 帮助客户端和 message

broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻 量级的Connection 极大减少了操作

系统建立 TCP connection 的开销

Exchange:message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到

queue 中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)

Queue:消息最终被送到这里等待 consumer 取走

Binding:exchange 和queue 之间的虚拟连接,binding 中可以包含 routing key, Binding 信息被保存到

exchange 中的查询表中,用于 message 的分发依据

简单来说:

1、生产者发送消息到MQ交换机

2、交换机根据定义的绑定规则和传过来的key将消息放到不同队列中

3、消费者从队列中取出消息进行消费

五、工作模式

让我们看看官网:RabbitMQ tutorial - "Hello World!" | RabbitMQ

经过官网文档介绍,我们知道RabbitMQ的工作模式有七种

Hello Wold 简单模式/普通模式

Work queues 工作队列模式

Publish/Subscribe 发布订阅模式

Routing 路由模式

Topics 主题模式

RPC 远程调用模式

Publisher Confirms 发布确认模式

1. 普通模式

2. Worker模式

类似于RocketMQ集群模式,发送消息只有一个消费者去消费。prefetchCount默认预取250个

消息,可以在配置文件中配置预取消息数量,实现各个节点多劳多得。消费速度快的就可以消费更多的消息。

spring.rabbitmq.listener.simple.prefetch=自定义预取数量

3. PubSub模式

类似于RocketMQ广播模式,所有消费者都会收到消息。

生产者需要指定交换机,不需要指定队列。type ="fanout"

4. Rounting模式

根据指定的交换机及路由key来发送消息,

即消费者绑定了与生产者发布的消息相同的路由key时才可以收到消息。

5. Topic模式

Rounting模式的一种,交换机根据key的规则模糊匹配到对应的队列,由队列的监听消费者接收消息消费

6. RPC模式

远程过程调用RPC

7. Publisher Confirms模式

六、基本结构

七、常见五个角色

  • publisher:生产者
  • consumer:消费者
  • exchange:交换机,负责消息路由
  • queue:队列,存储消息
  • virtualHost:虚拟主机,隔离不同用户的exchange、queue、消息的隔离

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/440567.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

828华为云征文|华为云Flexus云服务器X实例部署 即时通讯IM聊天交友软件——高性能服务器实现120W并发连接

营运版的即时通讯IM聊天交友系统:特点可发红包,可添加多条链接到用户网站和应用,安卓苹果APPPC端H5四合一 后端开发语言:PHP, 前端开发语言:uniapp混合开发。 集安卓苹果APPPC端H5四合一APP源码&#xff0…

推理攻击-Python案例

1、本文通过推理攻击的方式来估计训练集中每个类别的样本数量、某样本是否在训练集中。 2、一种简单的实现方法:用模型对训练数据标签进行拟合,拟合结果即推理为训练集中的情况。 3、了解这些案例可以帮助我们更好的保护数据隐私。 推理攻击(…

旋转花键高效运行关键之一

旋转花键是一种广泛应用于机械设备中的重要部件,具有传递扭矩、承受载荷和维持运动精度等功能,而旋转花键润滑脂则是确保其正常运作的关键因素之一。事实上,旋转花键润滑油的选择是一个综合性的过程,需要考虑多个因素以确保设备的…

图解Linux文件属性与目录配置

Linux的文件属性十分重要,与windows的文件属性有很大不同,Linux的文件增加了许多属性,如读写、连接数、文件拥有者及所属群组。如果一个文件属于一个群组,那么这个群组的成员就可以访问,其他的群组就不能访问&#xff…

Vue组件库Element-ui

Vue组件库Element-ui Element是一套为开发者、设计师和产品经理准备的基于Vue2.0的桌面端组件库。Element - 网站快速成型工具 安装element-ui npm install element-ui # element-ui版本(可以指定版本号引入ElementUI组件库,在main.js中添加内容得到&…

在线教育系统开发:SpringBoot技术实战

3系统分析 3.1可行性分析 通过对本微服务在线教育系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本微服务在线教育系统采用SSM框架,JAVA作为开…

汽车追尾为什么是后车的责任?

简单点说:因为人后面没有长眼睛。 结论 在汽车追尾事故中,通常情况下后车被认为是责任方的原因在于交通法规对驾驶安全标准的约定和实践中的责任识别原则。虽然追尾事故常见地被归责于后车,但具体判断并不是绝对的,仍需综合多种…

101. 对称二叉树【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路3.1 递归3.2 迭代 四、参考代码4.1 递归4.2 迭代 零、原题链接 101. 对称二叉树 一、题目描述 给你一个二叉树的根节点 root , 检查它是否轴对称。 进阶:你可以运用递归和迭代两种方法解决…

【Flutter】- 核心语法

文章目录 知识回顾前言源码分析1. 有状态组件2. 无状态组件3. 组件生命周期4. 常用组件Container组件Text组件Image组件布局组件row colum stack expandedElevntButton按钮拓展知识总结知识回顾 【Flutter】- 基础语法 前言 Flutter是以组件化的思想构建客户端页面的,类似于…

Linux的环境变量

环境变量是告诉操作系统在实行命令时在哪个路径下去找对应的命令程序 1.env命令查看当前系统的环境变量 2.环境变量path 此时有三个路径,当操作某命令时会先向path里的路径查看输入的命令在不在这些路径下 eg:输入cd命令,会先在cd命令在不在这三个路径,在就直接执行,不用切换…

微软GraphRAG实战解析:全局理解力如何超越传统RAG

微软近日开源了新一代RAG框架GraphRAG,以解决当前RAG在大型语料库上全局理解问题。当前RAG主要聚焦于局部检索能力,即根据查询语句在向量库中匹配部分知识,然后通过大型语言模型合成这些检索到的信息,生成一个自然流畅的回答。相信…

Python和C++胶体粒子三维残差算法模型和细化亚像素算法

🎯要点 使用信噪比、对比度噪声比和点扩展函数量化实验数据,增强共聚焦显微镜成像。参考粒子跟踪算法:使用二维和三维径向模型细化亚像素。胶体粒子三维图形分割学习模型模拟检测球形胶体。使用网格搜索优化模型和归一化处理以避免光漂白。 …

UDP协议【网络】

文章目录 UDP协议格式 UDP协议格式 16位源端口号:表示数据从哪里来。16位目的端口号:表示数据要到哪里去。16位UDP长度:表示整个数据报(UDP首部UDP数据)的长度。16位UDP检验和:如果UDP报文的检验和出错&…

【深度强化学习】DDPG实现的4个细节(OUNoise等)

文章目录 前言一、论文内容简述创新点(特点,与DQN的区别):可借鉴参数:细节补充: 二、细节1:weight_decay原理代码 三、细节2:OUNoise原理代码 四、细节3:ObsNorm原理代码…

Linux聊天集群开发之环境准备

一.windows下远程操作Linux 第一步:在Linux终端下配置openssh,输入netstate -tanp,查看ssh服务是否启动,默认端口22.。 注:如果openssh服务,则需下载。输入命令ps -e|grep ssh, 查看如否配有, ssh-agent …

openpnp - 单独用CvPipeLineEditor来调试学习图片识别参数

文章目录 openpnp - 单独用CvPipeLineEditor来调试学习图片识别参数概述笔记官方给出的单独启动CvPipeLineEditor的方法我自己环境单独启动CvPipeLineEditor的方法CvPipeLineEditor启动后的样子添加命令的方法删除不要的命令参数调整多个命令参数的执行顺序添加命令用来载入实验…

脉冲神经网络(SNN)论文阅读(六)-----ECCV-2024 脉冲驱动的SNN目标检测框架:SpikeYOLO

原文链接:CSDN-脉冲神经网络(SNN)论文阅读(六)-----ECCV-2024 脉冲驱动的SNN目标检测框架:SpikeYOLO Integer-Valued Training and Spike-Driven Inference Spiking Neural Network for High-performance …

02 nth_element 与第k小

题目&#xff1a; 方案一&#xff1a;sort排序 #include<bits/stdc.h> using namespace std;int main() {int n;int k;cin>>n>>k;int a[n]{0};for(int i0;i<n;i){cin>>a[i];}sort(a,an); cout<<a[k]<<endl;}方案二&#xff1a;…

第三届图像处理、计算机视觉与机器学习国际学术会议(ICICML 2024)

目录 重要信息 大会简介 组织单位 大会成员 征稿主题 会议日程 参会方式 重要信息 大会官网&#xff1a;www.icicml.org 大会时间&#xff1a;2024年11月22日-24日 大会地点&#xff1a;中国 深圳 大会简介 第三届图像处理、计算机视觉与机器学…

STM32 通用同步/异步通信

一、串行通信简介 CPU与外围设备之间的信息交换称为通信。基本的通信方式有并行通信和串行通信两种。STM32单片机提供了功能强大的串行通信模块&#xff0c;即通用同步/异步收发器&#xff08;USART&#xff09;。 1.串行通信 串行通信是数据字节一位一位地依次传送的通信方式。…