【图解RabbitMQ-3】消息队列RabbitMQ介绍及核心流程

🧑‍💻作者名称:DaenCode
🎤作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表,业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开发。技术尚浅,闭关学习中······
😎人生感悟:尝尽人生百味,方知世间冷暖。
📖所属专栏:图解RabbitMQ


在这里插入图片描述


专栏推荐

  • 专门为Redis入门打造的专栏,包含Redis基础知识、基础命令、五大数据类型实战场景、key删除策略、内存淘汰机制、持久化机制、哨兵模式、主从复制、分布式锁等等内容。链接>>>>>>>>>《Redis从头学》
  • SpringBoot实战相关专栏,包含SpringBoot过滤器、拦截器、AOP实现日志、整合Freemaker、整合Redis等等实战相关内容,多篇文章登入全站热榜、领域热榜、被技术社区收录。链接>>>>>>《SpringBoot实战》

文章目录

  • 专栏推荐
  • 🌟前言
  • 🌟RabbitMQ是什么?
  • 🌟特点
  • 🌟核心组件
  • 🌟核心流程
  • 🌟写在最后

🌟前言

在上一节中学习了JMS消息服务与AMQP协议。了解了这两大消息传递技术,这一节就学习基于AMQP协议实现的RabbitMQ消息中间件是什么?RabbitMQ的架构图是怎样的?以及RabbitMQ中的核心组件。


🌟RabbitMQ是什么?

以下解释来源于百度百科:

RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

个人理解:

基于AMQP协议实现的消息中间件,采用Erlang语言编写。

架构图:
在这里插入图片描述


🌟特点

  1. 跨平台、多语言支持。基于AMQP协议实现。
  2. 支持分布式
  3. 可以与SpringAMQP进行整合
  4. 易于管理。提供了web管理页面用来监控和管理消息队列。
  5. 消息可靠性。RabbitMQ内部有消息可靠性投递机制,避免消息中途的丢失。

🌟核心组件

对于核心组件的位置,可以参照架构图。
在这里插入图片描述

  • Broker:相当于一个MQ节点。
  • Producer:生产者。创建消息并发送到Broker中。
  • Consumer:消费者。监听Queue中的消息并消费。
  • Message:消息。数据对象,有消息头和消息体。
  • Queue:消息的载体。负责存储消息。
  • Channel:信道。支持多路复用,建立在生产者与broker、broker与消费者之间的虚拟连接。
  • Connection:一个连接上可以有多个Channel。
  • Exchange:交换机。生产者将消息发送给交换机,交换机负责使用binding_key绑定交换机与队列。
  • RoutingKey:路由键。消息的路由规则。
  • Binding:通过routingkey与bingding_key的规则,绑定交换机与队列。
  • Virtual Host:虚拟主机。虚拟的电脑,用来分离不同的业务逻辑模块或者环境。

🌟核心流程

  1. Producer创建消息并发送到Broker。
    • Producer与Broker建立连接Connection。
    • 在Connection中创建信道Channel。
    • Producer声明一个交换机Exchange,用于接受消息Message并将它们路由到正确的Queue。
    • Producer选择一个RoutingKey,用于指定Exchange与哪个Queue进行绑定。
    • Producer发送消息到Exchange。
    • 关闭Channel。
    • 关闭Connection。
  2. Broker中的Exchange接收到消息后,根据RoutingKey规则路由到正确的Queue。
  3. Exchange与Queue通过Bingding绑定。
  4. Queue按照先进先出存储消息和处理消息。
  5. 消费者从队列中消费消息Message。
    • Consumer与Broker建立连接Connection。
    • 在Connection创建信道Channel。
    • Consumer通过ACK机制确认并消费消息。
    • Queue中删除被消费的消息。
    • 关闭Channel。
    • 关闭Connection。

🌟写在最后

有关于消息队列RabbitMQ基本介绍到此就结束了。在本文中对RabbitMQ的基本概念做出了介绍,并配合架构图对其核心组件进行了总结。

非常感谢大家的阅读,对于学习过程中遇到的问题,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。


请添加图片描述

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

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

相关文章

智汇云舟亮相2023服贸会,全面展示视频孪生技术与产品

9月2日-6日,为期5天的2023年中国国际服务贸易交易会(以下简称:服贸会)在北京首钢园举办。在电信、计算机和信息服务专题展馆中,智汇云舟有幸作为北京市专精特新和数字孪生企业优秀代表受邀参展,并携视频孪生…

C语言入门 Day_14 for循环

前言 我们定义了一个数组以后,要使用(读取或者修改)数组元素的话,可以一个一个的读取,就前两课学的那样,代码类似这个结构。 int number_list[5]{1,2,3,4,5}; printf("%d\n",number_list[0]); …

Bootstrap的行、列布局设计(网络系统设计)

目录 00-基础知识01-等宽列布局02-指定某一列的宽度03-根据内容自动改变列的宽度04-五种预定义列宽度 .col、.col-sm-*、.col-md-*、.col-lg-*、.col-xl-*05-不同视口宽度按不同的分列方案划分06-删除列内容的盒模型的外边距07-超过12列怎么办?08-重新排列各列的顺序…

Bootstrap的标题类(标题样式h1~h6)

Bootstrap 的标题字体大小通常遵循以下样式规则: h1 标题的字体大小为 2.5rem(40像素)。h2 标题的字体大小为 2rem(32像素)。h3 标题的字体大小为 1.75rem(28像素)。h4 标题的字体大小为 1.5re…

大数据的关键技术之——大数据采集

大数据的关键技术之——大数据采集 本文目录: 一、写在前面的话 二、大数据采集概念 三、大数据采集步骤 3.1、大数据采集步骤(总体角度) 3.2、大数据采集步骤(数据集角度) 3.3、大数据采集步骤(数据…

O2OA(翱途)开发平台 V8.1正式发布

尊敬的O2OA(翱途)平台合作伙伴、用户以及亲爱的开发小伙伴们,平台 V8.1版本已正式发布。正值8月的最后一周,我们以更安全、更高效、更好用的崭新面貌迎接9月的到来。 O2OA开发平台v8.1版本更注重于对系统级别的安全防护。其中重大的更新,是对…

解决VUE3项目部署后存在缓存页面不更新的问题

方法一&#xff1a; 找到项目中的index.html文件&#xff0c;在头部加上以下代码 <meta http-equiv"Pragma" content"no-cache"> <meta http-equiv"Cache-control" content"no-cache"> <meta http-equiv"Cache&…

LeetCode 138. Copy List with Random Pointer【链表,DFS,迭代,哈希表】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

【开发问题系列】CSV转Excel

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

MySQL5.7慢查询实践

总结 获取慢查询SQL 已经执行完的SQL&#xff0c;检查慢查询日志&#xff0c;日志中有执行慢的SQL正在执行中的SQL&#xff0c;show proccesslist;&#xff0c;结果中有执行慢的SQL 慢查询日志关键参数 名称解释Query_time查询消耗时间Time慢查询发生时间 分析慢查询SQL e…

python基础运用例子

python基础运用例子 1、⼀⾏代码交换 a , b &#xff1a;a, b b, a2、⼀⾏代码反转列表 l[::-1]3、合并两个字典 res {**dict1, **dict2}**操作符合并两个字典for循环合并dict(a, **b) 的方式dict(a.items() b.items()) 的方式dict.update(other_dict) 的方式 4、⼀⾏代码列…

蓝桥杯打卡Day2

文章目录 糖果分享游戏玛雅人的密码 一、糖果分享游戏IO链接 本题思路:本题是一道模拟题&#xff0c;最终需要每个人得到相同的糖果&#xff0c;那么此时我们开辟一个数组用来保存每个人分一半的结果&#xff0c;然后每个人都需要从左边拿到对方糖果&#xff0c;那么左边就是…