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

news2024/10/6 4:05:03

🧑‍💻作者名称: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.coloradmin.cn/o/978485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux线程讲解

1.线程概述 一个进程在同一时刻只做一件事情,进程是程序执行的一个实例。 线程是操作系统能够进行运算调度的最小单位,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 进程:资源分配的最小单位。线程,程…

【vue2第十四章】 插槽(普通插槽、具名插槽、作用域插槽语法)

插槽 插槽是什么&#xff1f; 在 Vue 2 中&#xff0c;插槽&#xff08;slot&#xff09;是一种用于定义组件内部内容分发的机制。它允许你将组件中的一部分内容替换为用户自定义的内容&#xff0c;并在组件内部进行渲染。 通过在组件模板中使用 <slot></slot> 标…

yml配置动态数据源(数据库@DS)与引起(If you want an embedded database (H2, HSQL or Derby))类问题

1&#xff1a;yml 配置 spring:datasource:dynamic:datasource:master:url: jdbc:mysql://192.168.11.50:3306/dsdd?characterEncodingUTF-8&useUnicodetrue&useSSLfalse&tinyInt1isBitfalse&allowPublicKeyRetrievaltrue&serverTimezoneUTCusername: ro…

Ceph PG Peering数据修复

ceph数据修复 当PG完成了Peering过程后&#xff0c;处于Active状态的PG就可以对外提供服务了。如果该PG的各个副本上有不一致的对象&#xff0c;就需要进行修复。 Ceph的修复过程有两种&#xff1a;Recovery和Backfill。 Recovery是仅依据PG日志中的缺失记录来修复不一致的对…

Vue进阶(六十七)页面刷新路由传参丢失问题分析及解决

文章目录 一、前言二、问题排查三、延伸阅读3.1 Apache服务器access_log日志3.2 浏览器的常见User Agent 各字段的解释 一、前言 问题描述&#xff1a;Vue项目上线后&#xff0c;在IE浏览器上&#xff0c;从A页面跳转至B页面&#xff0c;B页面通过data中接收来自A页面的参数信…

JavaScript简称“JS”简单介绍

JavaScript简称“JS” JavaScript&#xff08;简称“JS”&#xff09;是一种具有函数优先的轻量级&#xff0c;解释型或即时编译型的编程语言。虽然它是作为 开发 Web 页面的脚本语言而出名&#xff0c;但是它也被用到了很多非浏览器环境中&#xff0c; JavaScript 基于原型编…

使用自定义注解和SpringAOP捕获Service层异常,并处理自定义异常

目录 一 自定义异常二 自定义注解三 注解切面处理类四 使用 一 自定义异常 /*** 自定义参数为null异常*/ public class NoParamsException extends Exception {//用详细信息指定一个异常public NoParamsException(String message){super(message);}//用指定的详细信息和原因构…

Matlab图像处理-低通滤波

低通滤波 频域低通滤波法可以去除或削弱图像的高频成分&#xff0c;以去掉噪声使图像平滑。 理想低通滤波器是指输入信号在通带内所有频率分量完全无损地通过&#xff0c;而在阻带内所有频率分量完全衰减。 低通滤波的效果是图像去噪声平滑增强&#xff0c;但同时也抑制了图…

关于10月份美国FDA化妆品强制注册通知要求及注意事项

根据美国法律&#xff0c;产品是化妆品还是药物取决于产品的预期用途。如果商品是化妆品用途&#xff0c;那FDA要求产品在FDA系统上进行申报即可&#xff1b;如果化妆品带有药用功效&#xff0c;在查验时要出具FDA正本。 1.所有在美市场流通的化妆品制造商皆须于2023/12/29前完…

nuxt3项目使用pdfjs-dist预览pdf

使用的包的源代码是 pdfjs - npm 但是我们实际上项目中使用的是pdfjs打包后的dist文件&#xff0c;也就是pdfjs-dist - npm 所以我们需要使用这个命令 npm i pdfjs-dist 我们可以克隆pdfjs这个包来看源代码&#xff0c;里面有使用的例子&#xff0c;也可以根据源代码自己打…

18|乐观豁达:黄州重生的苏轼

好诗相伴&#xff0c;千金不换。你好&#xff0c;我是天博。 从这一讲开始&#xff0c;我们进入了这门课的最后一个主题&#xff1a;“见自己”。在这个主题里&#xff0c;我们会把重点放在“诗词给了我们什么”上&#xff0c;也就是怎样从诗词里汲取对我们有帮助的精神力量。…

中级深入--day19

鼠标动作链 有些时候&#xff0c;我们需要再页面上模拟一些鼠标操作&#xff0c;比如双击、右击、拖拽甚至按住不动等&#xff0c;我们可以通过导入 ActionChains 类来做到&#xff1a; 示例&#xff1a; #导入 ActionChains 类 from selenium.webdriver import ActionChains…

异步编程 - 01 漫谈异步编程发展史

文章目录 同步编程vs异步编程异步编程小故事单JVM异步地处理一些事情&#xff0c;而不需要知道异步任务的结果主线程等待异步任务的执行结果Future确实可以获取异步任务的执行结果&#xff0c;但是获取其结果还是会阻塞调用线程的&#xff0c;并没有实现完全异步化处理 --> …

LabVIEW应用开发——LabVIEW2019保姆级介绍、安装、第一个程序

一、前言 LabVIEW是一种程序开发环境&#xff0c;由美国国家仪器&#xff08;NI&#xff09;公司研制开发&#xff0c;类似于C和BASIC开发环境&#xff0c;但是LabVIEW与其他计算机语言的显著区别是&#xff1a;其他计算机语言都是采用基于文本的语言产生代码&#xff0c;而Lab…

JavaSE-日志

世上只有想不通的人&#xff0c;没有走不通的路。 文章目录 1. 日志概述2. Logback日志框架3. Logback快速入门4. Logback配置详解输出位置设置日志级别设置 1. 日志概述 通过日志可以查看程序运行的过程和详情。 输出语句的弊端&#xff1a; 信息只能展示在控制台。不能将其记…

java读取服务器数据包并下载至本地目录

jsch包如果没有的话&#xff0c;可评论联系我&#xff0c;我私发给你&#xff0c;或者通过https://mvnrepository.com/artifact/com.jcraft/jsch/0.1.55进行下载&#xff0c;添加至工程目录 package com.hbisdt.dqbasic.modular.util;import com.jcraft.jsch.*;import java.i…

OpenShift 4 - 利用 OpenShift 的 OAuth Proxy 实现应用身份认证

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在 OpenShift 4.13 的环境中验证 文章目录 部署测试应用只有认证用户才能访问只有有权的用户才能访问使用 ServiceAccount 访问参考 说明&#xff1a; 本文需要集群中除了管理员外还有一个一般用户。另外除…

Leetcode 1486.数组异或操作

给你两个整数&#xff0c;n 和 start 。 数组 nums 定义为&#xff1a;nums[i] start 2*i&#xff08;下标从 0 开始&#xff09;且 n nums.length 。 请返回 nums 中所有元素按位异或&#xff08;XOR&#xff09;后得到的结果。 示例 1&#xff1a; 输入&#xff1a;n 5, …

NPM 常用命令(四)

目录 1、npm diff 1.1 描述 1.2 过滤文件 1.3 配置 diff diff-name-only diff-unified diff-ignore-all-space diff-no-prefix diff-src-prefix diff-dst-prefix diff-text global tag workspace workspaces include-workspace-root 2、npm dist-tag 2.1 常…

79 # koa 相应结果设置

返回的类型可能是文件流&#xff0c;或者是对象的等方式&#xff0c;需要我们对 body 的类型进行判断在返回。 判断是否是 string 或者 buffer 、流、对象 if (typeof body "string" || Buffer.isBuffer(body)) {res.end(body); } else if (body instanceof Strea…