RabbitMQ系列-概念及安装
1. 消息队列
消息队列是指利用队列这种数据结构进行消息发送、缓存、接收,使得进程间能相互通信,是点对点的通信
而消息代理是对消息队列的扩展,支持对消息的路由,是发布-订阅模式的通信,消息的发送者并不清楚消息的接收者,消息可以被多个消费者接收。
使用消息队列的作用如下
异步:对于一些用户的请求,可能包含一些发送短信,发送邮件等系统处理,此时可以不需要等待短息发送完成或者邮件发送完成,而是通过消息队列通知这些模块即可返回,避免用户长时间等待
解耦:将数据发送到消息队列,对该数据感兴趣的系统自行订阅该消息即可,这种做法可以降低代码的耦合度。
消峰填谷:将瞬时高并发请求打到消息队队列上,作为数据库请求的缓冲,避免短时间大量的数据库请求导致数据库奔溃。
2. RabbitMQ简介
RabbitMQ是一种开源的多协议消息代理软件,它将消息发布者(发布消息的应用程序,也称为生产者)接收消息并将它们路由到消费者(处理消息的应用程序)。
RabbitMQ支持多种消息传递协议,其中AMQP 0-9-1是核心,并以插件的形式支持STOM,MQTT,AMQP 1.0。
AMQP,即Advanced Message Queuing Protocol,中文名称是高级消息传递协议。
AMQP 0-9-1 模型如下图所示

消息生产者producer和消费者consumer均通过TCP连接消息代理broker,生产者producer将消息投递到交换机exchange,消息代理根据消息队列queue和交换机exchange的绑定关系bind将消息推送到对应的消息队列queue,最后消费者consumer消费感兴趣消息队列中的数据。
2.1 RabbitMQ中的相关概念
Producer:消息生产者
Consumer:消息消费者
Broker:消息代理,这里指即RabbitMQ,通过消息代理可以将消息从生产者投递到消费者
Virtual host:虚拟主机,使单个消息代理能提供了多个相对隔离的环境,隔离的资源包括交换机、队列等
Exchange:交换机,作用相当于现实生活的快递公司,生产者的消息实际时先投递到交换机,交换机再根据类型和绑定关系拷贝消息副本到指定队列,交换机的类型有direct, topic, headers and fanout
Queue: 队列,先进先出的优先级队列,充当了一个缓冲区的角色,作用相当于现实生活中的菜鸟驿站等代收点
Binding:交换机和队列的绑定关系,交换机投递消息到指定队列的规则,作用相当于现实生活中寄快递时填写的地址
Connection: 消息生产者和消费者通过TCP连接到虚拟主机,确保数据传输到可靠性
Channel:共享单个TCP连接的轻量级的Connection,不同Channel通过Channel ID隔离开,互不影响,通常一个进程可以只建立一个TCP连接,减少TCP的资源开销
2.2 RabbitMQ特性
可靠性(Reliablity):使用TCP连接进行数据传输、且提供了消息持久化、队列持久化、生产者发送确认、消费者消费确认等机制保证消息的可靠
灵活的路由(Flexible Routing):提供了多种类型的交换机Exchange
消息集群(Clustering):多个RabbitMQ服务器可以组成一个集群,形成一个逻辑消息代理Broker
高可用(Highly Avaliable Queues):队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用
多种协议(Multi-protocol):支持多种消息队列协议,核心是AMQP,通过插件形式支持STOMP、MQTT等
多种语言客户端(Many Clients):几乎支持所有常用语言,比如Java、Python、Golang等
管理界面(Management UI):提供了易用的用户界面,使得用户可以监控和管理消息Broker的许多方面
跟踪机制(Tracing):如果消息异常,RabbitMQ提供了消息的跟踪机制,使用者可以找出发生了什么
插件机制(Plugin System):提供了许多插件,来从多方面进行扩展,也可以编辑自己的插件
3. RabbitMQ安装
3.1 安装Docker
参考Install Docker Desktop on Mac安装docker,安装完成后点击Docker图标以启动Docker服务
这里简单介绍几个常用的docker命令
docker ps -a可以看到Docker启动过的容器
$ docker ps -a | |
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES | |
8918b9e8bae2 rabbitmq:3-management "docker-entrypoint.s…" 2 days ago Up 2 days 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp some-rabbit |
docker stop CONTAINER ID停止运行中的容器
$ docker stop 8918b9e8bae2 | |
8918b9e8bae2 |
docker restart CONTAINER ID重启容器
$ docker restart 8918b9e8bae2 | |
8918b9e8bae2 |
docker exec -it CONTAINER ID /bin/bash 可以进入运行容器的终端
$ docker exec -it 8918b9e8bae2 /bin/bash | |
root@my-rabbit:/# |
3.2 RabbitMQ安装及启动
打开终端,在终端中输入
docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management
通过http://localhost:15672可以访问管理后台,默认账号和密码均是guest
5672是AMQP 0-9-1使用的端口
4. 管理后台
管理后台提供了监控和管理RabbitMQ节点和集群的能力。
管理后台如下图所示

通过该管理后台,可以查看当前活跃的Connection, Channel, Exchange, Queue等信息,从图片可以看出当前活跃的Exchange共有7个,具体的类型覆盖了direct, topic, headers and fanout四种。
通过这个管理后台也可以创建或者删除Connection, Channel, Exchange, Queue
相关文章:
RabbitMQ系列-概念及安装
1. 消息队列 消息队列是指利用队列这种数据结构进行消息发送、缓存、接收,使得进程间能相互通信,是点对点的通信 而消息代理是对消息队列的扩展,支持对消息的路由,是发布-订阅模式的通信,消息的发送者并不清楚消息的…...
进程间通信之共享内存
进程间通信之共享内存 1.共享内存机制2.两种常用共享内存方式3.补充一下:linux中shm与shmm的区别4.IPC通信System V版本的共享内存shm5.存储映射共享I/O(mmap函数)1.共享内存机制 是允许两个或多个进程(不相关或有亲缘关系)访问同一个逻辑内存的机制。它是共享和传递数据的一…...
网络连接中的舔狗协议
舔狗网络协议 (discard protocol) 最近互联网上,“舔狗” 这个词语很火,也衍生出来很多梗(快速说出互联网 4 大舔狗!!!)。然后今天偶然间看到了一个 RFC 文档, 发现了一…...
一分钟了解乐观锁、悲观锁、共享锁、排它锁、行锁、表锁以及使用场景
大家好,我是冰点,今天给大家带来,关于MySQL中的锁的使用。 我首先提个问题,大家知道什么是 乐观锁、悲观锁、共享锁,、排它锁、行锁、表锁,以及每种锁的使用场景吗? !! 背景:最近在各…...
【C++】C++ 中的 IO 流
文章目录 一、C语言的输入输出二、什么是流三、C IO 流1、C 标准 IO 流2、C 文件 IO 流 四、stringstream 介绍 一、C语言的输入输出 在C语言中我们使用最频繁的输入输出方式是 scanf () 与 printf(): scanf():从标准输入设备 (键盘) 读取数据…...
QFuture的使用
QFuture 是 Qt 提供的一个类,用于表示异步操作的返回值或状态。异步操作指的是那些不会阻塞主线程的操作,例如文件读写、网络请求、计算等等。 在执行异步操作时,可以使用 QtConcurrent 模块提供的函数 (QFuture<T> QtConcurrent::run…...
通过dockerfile将nginx、前端和后端封装成一个镜像
1、内容如下 2、dist文件 就是vue项目的打包文件 3、jar包文件 就是springboot的打包文件 4、编写Dockerfile #引用 jdk1.8作为基础镜像,这个jdk1.8是我自己用linux版本的jdk打包的,具体操作可以看 #https://blog.csdn.net/qq_38639813/article/details/129384923中将jd…...
如何利用CiteSpace快速锁定领域内最新研究热点并制作精美的可视化专题图?
【基于Citespace和vosviewer文献计量学相关论文 】 01 文献计量学方法与应用 1. 文献计量学方法基本介绍 2. 与其他综述方法区别联系 3. 各学科领域应用趋势近况 4. 主流分析软件优缺点对比 5. 经典高分10SCI思路复盘 6. 软件安装与Java环境配置 02 主题确定、数据检…...
嵌入式开发从入门到精通之第二十二节:蓝牙芯片CC254x ADC 电压测量
目录 1. CC254x ADC原理 参考电压 采样通道 采样率 采样时间...
北邮22信通:二叉树显示路径的两种方法 递归函数保存现场返回现场的实例
北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 获取更多文章 请访问专栏~ 北邮22信通_青山如墨雨如画的博客-CSDN博客 一.讲解 要想实现二叉树的路径显示,我们要按照…...
vue 3 第二十八章:组件十二(组件的v-model、多v-model)
文章目录 1. 基本使用2. 使用conputed实现3. v-model 的参数4. 多 v-model 的使用5. v-model 修饰符 在 Vue 3 中, v-model 指令的使用更加灵活,可以绑定任意属性和事件。例如,我们可以使用 v-model:checked 指令来绑定单选框或复选框的 c…...
LCD 显示
概述 LCD显示控制模块接收 MCU 送过来的数据,按一定规律储存在显示 RAM 中,并根据显示 RAM 中的数据驱动 LCD 显示屏来实现期望的字符显示功能。 主要特点: ⚫ 最大支持 840 、 642 、 444 的显示段数 ⚫ 1/3bias 、 1/4bia s ⚫ 16 级灰度可…...
互联网医院开发|在线问诊系统架构设计功能有哪些?
互联网医院会增加更多的医疗业务,电话问诊、视频问诊、个性化的医疗套餐等,未来互联网医院会建成围绕健康主题的深度大数据平台和多元化医疗服务生态体系,丰富人工智能、物联网等应用场景,为用户提供更好的服务体验、更低的成本、…...
数据安全运营有效管理-数据安全复合治理框架和模型解读(1)
数据治理,数据安全治理行业在发展,在实践,所以很多东西是实践出来的,哪有什么神仙理论指导,即使有也是一家之说,但为了提高企业投产比,必要的认知是必须的,落地运营管理水平差异直接决定产品和项目是否可持续性,当前和未来更需要专业和有效创新。数据安全治理要充分考…...
【刷题之路】LeetCode 面试题 03.02. 栈的最小值
【刷题之路】LeetCode 面试题 03.02. 栈的最小值 一、题目描述二、解题1、方法1——“辅助栈”1.1、思路分析1.2、代码实现 一、题目描述 原题连接: 面试题 03.02. 栈的最小值 题目描述: 请设计一个栈,除了常规栈支持的pop与push函数以外&am…...
如何处理图片排重(精准排重,相似排重)
图片相似度对比 1、需求 假如有一个图片池,存有1亿图片。给一张目标图片,在图片池中做匹配。 判断一张图片是否在图片池中出现过。(完全一样)判断有没有相似的出现过。比如两张图相似度90,两张图片是在描述一件事情。 …...
盐城北大青鸟“北大青鸟杯”IT精英挑战赛设中心评审隆重开赛
为积极响应北大青鸟总部开展第十届“北大青鸟杯”全国IT精英挑战赛的号召,成就学员们的IT梦想,“北大青鸟杯”IT精英挑战赛(设计组)盐城卓晨中心评审于2023年5月25日下午1:00在人才大厦306教室正式开赛! 赛前&a…...
Pluma 插件管理框架
1. 概述 Pluma 是一个用 C 开发的可用于管理插件的开源架构,其官网地址为:http://pluma-framework.sourceforge.net/。该架构是个轻量级架构,非常易于理解。 Pluma 架构有以下基本概念: 1)插件的外在行为体现为一个…...
Leetcode11 盛最多水的容器
Leetcode11 盛最多水的容器 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/container-with-most-water/description 博主Github:https://github.com/GDUT-Rp/LeetCode 题目: 给定一个长度为 n…...
Java
FileOutputStream写数据的3种方式 void write(int b) //一次写一个字节的数据 void write(byte[] b) //一次写一个字节数组数据 void write(byte[] b, int off,int len) //一次写一个字节数组的部分数据 参数一:数组;参数二:起始索引 0;参数三:个数换行: windows:“\r\n” lin…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
41道Django高频题整理(附答案背诵版)
解释一下 Django 和 Tornado 的关系? Django和Tornado都是Python的web框架,但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架,鼓励快速开发和干净、实用的设计。它遵循MVC设计,并强调代码复用。Django有…...
STL 2迭代器
文章目录 1.迭代器2.输入迭代器3.输出迭代器1.插入迭代器 4.前向迭代器5.双向迭代器6.随机访问迭代器7.不同容器返回的迭代器类型1.输入 / 输出迭代器2.前向迭代器3.双向迭代器4.随机访问迭代器5.特殊迭代器适配器6.为什么 unordered_set 只提供前向迭代器? 1.迭代器…...
【大厂机试题+算法可视化】最长的指定瑕疵度的元音子串
题目 开头和结尾都是元音字母(aeiouAEIOU)的字符串为元音字符串,其中混杂的非元音字母数量为其瑕疵度。比如: “a” 、 “aa”是元音字符串,其瑕疵度都为0 “aiur”不是元音字符串(结尾不是元音字符) “…...
