【学习笔记】RabbitMQ01:基础概念认识以及快速部署

参考资料

  • RabbitMQ官方网站
  • RabbitMQ官方文档
  • 噼咔噼咔-动力节点教程

文章目录

    • 一、认识RabbitMQ
      • 1.1 消息中间件(MQ = Message Queue 消息队列
      • 1.2 主流的消息中间件
      • 1.3 MQ的应用场景
        • 1.3.1 异步处理
        • 1.3.2 系统解耦
        • 1.3.3 流量削峰
        • 1.3.4 日志处理
    • 二、RabbitMQ运行环境搭建
      • 2.1 了解版本兼容问题
      • 2.2 Dokcer安装
        • 2.2.1 docker-compose.yml
        • 2.2.3 启动
      • 2.3 WEB控制台简介
        • 2.3.1 页头信息
      • 2.4 admin页面
        • 2.4.1 用户标签
        • 2.4.2 Virtual hosts (虚拟主机
    • 三、RabbitMQ工作模型
      • 3.1 快速理解工作流程
      • 3.2 快速理解消息中间件 broker 的构成
      • 3.3 消息队列的核心三要素
        • 3.3.1 生产者 producer
        • 3.3.2 消费者 consumer
        • 3.3.3 代理 broker
      • 3.4 RabbitMQ的基础概念名词
        • 3.4.1 连接(Connection )
        • 3.4.2 信道(Channel)
        • 3.4.3 虚拟主机( Virtual host )
        • 3.4.4 交换机( Exchange)
        • 3.4.5 路由键( Routing Key )
        • 3.4.6 绑定( Binding )
        • 3.4.7 队列 ( Queue )
        • 3.4.8 消息(Message )

一、认识RabbitMQ

1.1 消息中间件(MQ = Message Queue 消息队列

简单来说,消息中间件就是指保存数据的一个容器(服务器),可以用于两个系统之间的数据传递

消息中间件一般有三个主要对象:

  • 生产者:producer
  • 消费者:consumer
  • 消息代理(也叫消息队列、消息服务器):broker

生产者发送信息到消息服务器,然后消费者会从消息代理中获取数据并进行处理。关系图如下。

其中,broker作为独立的中间件,是不需要我们手动编写的。

image-20231013154239231

1.2 主流的消息中间件

  • RabbitMQ
  • kafka(丝线交织
  • RocketMQ(java,阿里开源,实战丰富
  • pulsar(最新流行

1.3 MQ的应用场景

1.3.1 异步处理

在企业级java开发中,有很多需要异步线程处理的场景,这些场景如果比较简单且低负载,我们使用多线程,配合线程池即可很好是胜任。

但是如果出现大流量、高并发的数据传递时,使用消息中间件就很有必要了。

比如动力节点提到的这个场景:

image-20231013155009352

  • 按照普通的同步流程,这一系列操作会造成系统的阻塞,用户点击下订单后需要等待全部流程结束
  • 而使用MQ,就可以实现异步处理,生产者只需要处理下订单即可,剩下的交给MQ来管理。
1.3.2 系统解耦

MQ可以作为字面意义的消息中间件,负责调度不同系统之间的交互请求,通过消息进行业务流转(而不是不同的系统之间直接调用)。

  • 起到了类似中转调度中心的作用。
  • 甚至不同的系统也可以使用不同的语言进行开发

image-20231013155514153

1.3.3 流量削峰

用于QPS极高的情况,比如双十一订单量暴增的时候,如果直接将用户的请求打到数据库,则会造成极大的数据库压力。

使用MQ匀速消费可以将QPS降低到一个系统可接受的水平,保证系统的稳定运行。

image-20231013155741427

1.3.4 日志处理

主要是kafka这个服务器来做。

如果系统采用微服务处理,(比如有1000个微服务)每个单独的服务都会有大量的日志,如果要定位异常就需要每台服务器都要翻找日志,kafka解决了大量日志传输的问题,给出了ELK日志解决方案

image-20231013160023706

将所有的日志通过kafka集中到一个地方进行查看。

拓展阅读: ELK日志分析系统

由以下三个中间件组成

  • Elasticsearch
  • Logstash
  • Kibana

具体详解:

https://blog.csdn.net/weixin_49022211/article/details/109514485

https://blog.csdn.net/zkc7441976/article/details/115868050

二、RabbitMQ运行环境搭建

为了快速学习,使用docker快速部署

2.1 了解版本兼容问题

https://www.rabbitmq.com/which-erlang.html

2.2 Dokcer安装

参考原文链接:https://blog.csdn.net/qq_39340792/article/details/117715984

2.2.1 docker-compose.yml
version: '3.1'
services:rabbitmq:restart: alwaysimage: rabbitmq:managementcontainer_name: rabbitmqhostname: rabbitports:- 5672:5672- 15672:15672environment:TZ: Asia/ShanghaiRABBITMQ_DEFAULT_USER: rabbitRABBITMQ_DEFAULT_PASS: 123456volumes:- ./data:/var/lib/rabbitmq- ./conf:/etc/rabbitmq

注意:./conf目录即配置挂载目录需事先创建好,如果未事先创建或是空文件夹启动时会报错。

可以先不挂载该目录启动,然后 通过 docker cp 命令将配置目录拷贝出来。

示例:

docker cp rabbitmq:/etc/rabbitmq ./conf
2.2.3 启动

执行 docker-compose up -d命令启动。

浏览器访问 http://localhost:15672/ 进入RabbitMQ Management 页面。输入上面的用户名和密码登录。

页面如下

image-20231013160756627

2.3 WEB控制台简介

2.3.1 页头信息

标签页分别是

  • 概述 overview
  • 连接 connections
  • 信道 channels
  • 交换机 exchanges
  • 队列 queues
  • 系统配置 admin

image-20231013162329106

image-20231013162358165

2.4 admin页面

2.4.1 用户标签

image-20231013162706952

2.4.2 Virtual hosts (虚拟主机

image-20231013162839713

三、RabbitMQ工作模型

作为rabbitMQ的核心重点,理解工作模型有助于快速上手

image-20231013163409072

3.1 快速理解工作流程

大致的工作流程前面已经提到了——

image-20231013164621655

那么在上图中可以发现生产者是如何具体将消息传达到消费者中的。大致流程简单描述如下

  1. 首先,生产者通过虚拟信道和虚拟主机中的交换机建立连接
  2. 同时,消费者也通过虚拟信道和虚拟主机件的消息队列建立连接
  3. 生产者的消息,通过交换机传递到消息队列中,消费者从消息队列中接受消息

至此完成的消息的传递

3.2 快速理解消息中间件 broker 的构成

视频给了一个很形象的类比。有助于我们理解mq的基本构成

rabbitMQ服务器Mysql服务器
一个服务器可以创建多个不同的虚拟主机一个服务器可以创建多个不同的数据库
一个虚拟机可以有多个不同的消息队列一个数据库可以有多个不同的表格
队列中可以存储多条消息表格中可以存储多条记录

3.3 消息队列的核心三要素

这三要素是所有MQ中间件通用

3.3.1 生产者 producer

发送消息的应用。(可以是java程序,也可以是其他语言的程序

3.3.2 消费者 consumer

接受消息的应用。(可以是java程序,也可以是其他语言的程序

3.3.3 代理 broker

即消息服务器,消息中间件,也叫消息队列。

rabbitMQ server 就是 message broker

3.4 RabbitMQ的基础概念名词

3.4.1 连接(Connection )

连接 RabbitMo 服务器的TCP 长连接

3.4.2 信道(Channel)

连接中的一个虚拟通道,消息队列发送或者接收消息时,都是通过信道进行的;

3.4.3 虚拟主机( Virtual host )

一个虚拟分组,在代码中就是一个字符串。

当多个不同的用户使用同一个RabbitMQ 服务时,可以划分出多个 Virtual host。每个用户在自己的 Virtual host 创建 exchange/queue 等;

(分类比较清晰、相互隔离)

3.4.4 交换机( Exchange)

交换机负责从生产者接收消息,并根据交换机类型分发到对应的消息队列中,起到一个路由的作用

3.4.5 路由键( Routing Key )

交换机根据路由键来决定消息分发到哪个队列,路由键是消息的目的地址

也就是说其实在每一个channel中都有一个路由key,通过这个key就可以快速定位到具体的队列。避免了消息乱发队列的情况。

3.4.6 绑定( Binding )

绑定是队列和交换机的一个关联连接(关联关系)

3.4.7 队列 ( Queue )

存储消息的缓存队列

3.4.8 消息(Message )

由生产者通过 Rabbitmq 发送给消费者的信息; (消息可以任何数据字符串、user 对象,json 串等等)

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

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

相关文章

【C语言进阶(14)】程序的编译与链接

文章目录 前言Ⅰ 程序的翻译环境1. 编译的过程2. 链接的过程 Ⅱ 程序的执行环境Ⅲ 预定义符号Ⅳ 预处理指令 #define1. #define 定义标识符2. #define 定义宏3. #define 替换规则 Ⅴ 预处理操作符 # 和1. # 操作符2. ## 操作符 Ⅵ 宏和函数的对比Ⅶ 预处理指令 #undefⅧ 条件编…

【力扣每日一题】2023.10.19 同积元组

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目比较简洁,给我们一个元素各不相同的数组,要我们找出该数组里能够组成 a*bc*d 的组合数目。 比较直观的做法是我们直接暴…

【STM32】--PZ6860L,STM32F4,ARM3.0开发板

一、ARM3.0开发板详细介绍 1.开发板整体介绍 (1)各种外设和主板原理图 (2)主板供电部分5V和3.3V兼容设计 注意跳线帽 2.STM32核心板介绍 3.核心板原理图 STM32和51的IO对应关系 下载电路 二、ARM3.0开发板ISP下载原理分析 1.I…

分布式系统部署Redis

文章目录 一、单点问题二、主从模式概念配置主从结构查看主从节点断开从属关系拓扑结构主从复制原理replication复制offset偏移量 全量复制和部分复制全量复制部分复制 实时复制redis主节点无法重启 三、主从哨兵模式哨兵概念监控程序人工恢复自动恢复为什么是哨兵集合使用dock…

一文拿下HTTP

HTTP HTTP协议 是应用层使用最广泛的协议之一,从浏览器获取到网页,就是基于http 浏览器和服务器之间的交互桥梁 基于传输层的TCP协议来实现的,是一种无状态的应用层协议 为啥是无状态的呢 简化服务器端的处理逻辑:HTTP是无状态…

如何用记事本制作一个简陋的小网页(3)——注册信息表

目录 前提须知: 一、表格建立之前: 二、表格的建立: 三、信息表的内容填充: 1.昵称 和 电话 : 2.密码: 3.性别: 4. 爱好: 5.民族: 6. 出生日期: 7.…

Android apkanalyzer简介

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、用法3.1 使用 Android Studio3.1.1…

Python词语转拼音

使用python写的图形汉语词语转拼音小工具 1)安装库 pip install flet 2)代码 # 声母列表 initial_consonant_list [b, p, m, f, d, t, n, l, g, k, h, j, q, x, zh, ch, sh, r,z, c, s, y, w] # 韵母列表 list_of_vowels [a, o, e, i, u, , ai, ei, ui, ao, ou, iu, ie, e…

SpringCloudSleuth异步线程支持和传递

场景 在使用Sleuth做链路跟踪时,默认情况下异步线程会断链,需要进行代码调整支持。 调整内容 方式一 使用Async实现异步线程 开启异步线程池 EnableAsync SpringBootApplication public class LizzApplication {public static void main(String[] a…

织造业的数字安全守护者:深入了解迅软DSE数据加密

客户简要介绍 某织造企业成立于2004年,工厂位于苏州平望,公司目前拥有先进纺织设备330台套和日本瑞士等前道配套设备,公司占地33亩、具有现代化标准厂房办公楼等3万平米。 某织造企业面料、功能性面料、新材料面料的生产商,公司坚…

教程更新 | 持续开源 RK3568驱动指南-驱动基础进阶篇

《iTOP-RK3568开发板驱动开发指南》手册文档更新,手册内容对应视频教程,后续资料会不断更新,不断完善,帮助用户快速入门,大大提升研发速度。 ✦ 第一篇 驱动基础 第1章 前言 第2章 你好!内核源码 第3章 …

Mysql第二篇---InnoDB数据存储结构

Mysql第二篇—InnoDB数据存储结构 数据库的存储结构: 页 索引结构给我们提供了高效的索引方式, 不过索引信息以及数据记录都是保存在文件上的(innodb的ibd文件, MyISAM的MyI和MyD文件), 确切的说是存储在页结构中. 另一方面, 索引是在存储引擎中实现的, MySQL服务器上的存储引…

工业自动化编程与数字图像处理技术

工业自动化编程与数字图像处理技术 编程是计算机领域的基础技能,对于从事软件开发和工程的人来说至关重要。在工业自动化领域,C/C仍然是主流的编程语言,特别是用于工业界面(GUI)编程。工业界面是供车间操作员使用的,使用诸如Hal…

二叉树,堆排序及TopK问题

要讲二叉树的概念,就要先讲树的概念。 树是什么呢? 树其实是一种储存数据的结构,因为他的结构倒过来和生活中的树很相似所以才被称之为树。 这是一颗多叉树,从最顶端的节点可以找到下边的几个节点,下边的节点又可以找…

【力扣刷题】回文链表、环形链表、合并两个有序链表

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 刷题篇 一、回文链表1.1 题目描述1.2 思路分…

1.16.C++项目:仿muduo库实现并发服务器之HttpContext以及HttpServer模块的设计

文章目录 一、HttpContext模块二、HttpServer模块三、HttpContext模块实现思想(一)功能(二)意义(三)接口 四、HttpServer模块实现思想(一)功能(二)意义&#…

经典网络模型

Alexnet VGG VGG的启示 VGGNet采用了多次堆叠3x3的卷积核,这样做的目的是减少参数的数量。 例如,2个3x3的卷积核效果相当于1个5x5的卷积核效果,因为它们的感受野(输入图像上映射区域的大小)相同。但2个3x3卷积核的参数…

1024程序员狂欢节 | IT前沿技术、人工智能、数据挖掘、网络空间安全技术

一年一度的1024程序员狂欢节又到啦!成为更卓越的自己,坚持阅读和学习,别给自己留遗憾,行动起来吧! 那么,都有哪些好书值得入手呢?小编为大家整理了前沿技术、人工智能、集成电路科学与芯片技术、…

YOLOv8改进实战 | 更换主干网络Backbone之轻量化模型Efficientvit

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

PHP的学习入门建议

学习入门PHP的步骤如下: 确定学习PHP的目的和需求,例如是为了开发网站还是为了与数据库交互等。学习PHP的基础语法和程序结构,包括变量、数据类型、循环、条件等。学习PHP的面向对象编程(OOP)概念和技术。学习与MySQL…