干货:RabbitMQ消息队列基本原理介绍

RabbitMQ 是高级消息队列协议(AMQP)的开源消息代理软件。

RabbitMQ 服务器是用 Erlang 语言编写的,消息系统允许软件、应用相互连接和扩展。这些应用可以相互链接起来组成一个更大的应用,或者将用户设备和数据进行连接。消息系统通过将消息的发送和接收分离来实现应用程序的异步和解耦。

或许你正在考虑进行数据投递,非阻塞操作或推送通知。或许你想要实现发布 / 订阅,异步处理,或者工作队列。所有这些都可以通过消息实现。RabbitMQ 是一个消息代理 – 一个消息系统的媒介。它可以为你的应用提供一个通用的消息发送和接收平台,并且保证消息在传输过程中的安全。

干货:RabbitMQ消息队列基本原理介绍

功能亮点:

可靠性:RabbitMQ 提供了各种功能,让你权衡性能与可靠性,其中包括持久性,交付确认和高可用性。

灵活的路由:消息在到达队列之前,通过交换机的路由。RabbitMQ 为典型的路由逻辑提供了几个内置的交换机类型。对于更复杂的路由,则可以绑定几种交换机一起使用甚至可以自己实现交换机类型,并且把它作为一个插件的来使用。

集群:在本地网络上的几个 RabbitMQ 服务器可以聚集在一起,作为一个独立的逻辑代理来使用。

联合:对于服务器来说,它比集群需要更多的松散和非可靠链接。为此 RabbitMQ 提供了联合模型。

高度可用队列:在群集中,队列可以被镜像到几个机器中,确保您的消息即使在出现硬件故障的安全。

多协议:RabbitMQ 支持上各种消息传递协议的消息传送.

许多客户端:有你能想到的几乎任何语言 RabbitMQ 客户端。

管理用户界面:RabbitMQ 附带一个简单使用管理用户界面,允许您监视和控制您的消息代理的各个方面。

追踪:如果您的消息系统行为异常,RabbitMQ 提供跟踪支持,让你找出问题是什么。

插件系统:RabbitMQ 附带各种插件扩展,并且你也可以写你自己插件.

商业支持:提供商业支持、 培训和咨询。

大型社区:有一个庞大的社区 RabbitMQ,有各种各样的客户端、 插件、 指南等。

原理介绍

RabbitMQ 是一个消息代理。它的核心原理非常简单:接收和发送消息。你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处。在这个比喻中, RabbitMQ 就扮演着邮箱、邮局以及邮递员的角色。

RabbitMQ 和邮局的主要区别是,它不是用来处理纸张的,它是用来接收、存储和发送消息(message)这种二进制数据的。

在这里我们使用生产者、消费者模型来进行此次的模拟。

生产者消费者问题(Producer-consumer problem),也称有限缓冲问题(Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的”生产者”和”消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。

生产者(Producer)
生产者生成一定量的数据放到缓冲区中的程序统称,在本实验环境中,产生消息并发送到消息队列中的程序就是一个 生产者(producer)。也是我们上文比喻中写信,投信的人。

我们一般用 “P” 来表示:

干货:RabbitMQ消息队列基本原理介绍

队列(Queue)
它是一种特殊的线性表,在本实验环境中用于存放消息,也就是上文比喻中的邮箱。

消息通过你的应用程序和 RabbitMQ 进行传输,它们能够只存储在一个队列(queue)中。 队列(queue)没有任何限制,你要存储多少消息都可以——基本上是一个无限的缓冲。多个生产者(producers)能够把消息发送给同一个队列,同样,多个消费者(consumers)也能够从同一个队列(queue)中获取数据。

队列可以绘制成这样(图上是队列的名称):

干货:RabbitMQ消息队列基本原理介绍

消费者(Consumer)
消费者便是从消息队列中取出数据的程序统称。也就是上文比喻中的收件人,在本实验中一个消费者(consumer)就是一个等待获取消息的程序。

我们把它绘制为 “C”:

干货:RabbitMQ消息队列基本原理介绍

需要指出的是生产者、消费者、代理一般不会放置在在同一个设备上;事实上大多数应用也确实不在会将他们放在一台机器上。
基础知识大概就是这些,对RabbitMQ感兴趣的同学可以自行搜索学习。
在此给大家一些参考资料:
RabbitMQ官网
理论教程
实战教程

Original: https://www.cnblogs.com/shiyanlou/p/15185332.html
Author: 蓝桥云课
Title: 干货:RabbitMQ消息队列基本原理介绍

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/541800/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 不止面试-JVM垃圾回收面试题详解

    第一部分:面试题 本次分享我们将尝试回答以下问题: GC 是什么? 为什么要有 GC? 简单说一下java的垃圾回收机制。 JVM的常见垃圾回收算法有哪些? 为什么要使用分代回收机…

    Java 2023年6月15日
    057
  • Halo 开源项目学习(一):项目启动

    项目简介 Halo 是一个优秀的开源博客发布应用,在 GitHub 上广受好评,正好最近在练习写博客,借此记录一下学习 Halo 的过程。 项目下载 前提设置 导入项目 因为 Ha…

    Java 2023年6月9日
    069
  • 【每日算法】二分查找法

    模板 例题 367. 有效的完全平方数 描述 示例1 示例2 提示 思路 代码 69.x的平方根 描述 示例1 示例2 提示 代码 模板 left,right=1,n while …

    Java 2023年6月9日
    089
  • fastposter发布1.4.5 跨语言的海报生成器

    fastposter发布1.4.5 跨语言的海报生成器 v1.4.5 增加了右键菜单,修复了跨域bug 一分钟完成海报开发任务 future: 增加了右键菜单 删除 图层上移 图层…

    Java 2023年6月5日
    0116
  • 注释和良好的编程风格

    注释、良好的编程风格 注释 分类: 单行注&am…

    Java 2023年6月7日
    079
  • SpringBoot整合参数校验的两种方式应用实践

    背景:SpringBoot秒杀小项目实现了两种参数校验方式1.原登录业务逻辑处理使用的正则表达式校验手机号格式输入(未使用Validation参数校验,只是简单实现)2.更改业务逻…

    Java 2023年6月8日
    078
  • Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=…) with your test java.lang.IllegalStateException

    不能找到对应的带有@SpringBootConfiguration 的类,你需要将它放在包的最顶层。 Original: https://www.cnblogs.com/senio…

    Java 2023年5月29日
    077
  • JavaBean实体类

    就是实体类 JavaBean有特定的写法: 必须要有一个无参构造 属性必须私有化 必须有对应的get/set方法 一般用来和数据库的字段做映射:ORM ORM:对象关系映射 表&#…

    Java 2023年6月13日
    075
  • Redis SCAN命令

    获取指定前缀的key 需求描述: Redis中有大量以xxx开头的key,在不使用keys命令的情况下,如何快速获取这些前缀的key 解决方案: redis自带的scan命令可以解…

    Java 2023年6月7日
    091
  • java高并发锁的3种实现

    提到锁,大家可能都会想到synchronized关键字,使用它的确可以解决一切并发问题,但是对于系统吞吐要求更高的,在这里提供了几个小技巧,帮助大家减小锁粒度,提高系统并发能力。 …

    Java 2023年5月29日
    093
  • 五、JDK的安装与配置

    一、JDK下载与安装 1.1、下载JDK安装包 博主在这里给大家准备了一个64位操作系统的jdk1.8以便大家下载(使用的是迅雷)点击此处下载提取码:dfbt 如果其他小伙伴的电脑…

    Java 2023年6月5日
    082
  • 22.1.13 图

    22.1.13 图 1.图的表示方法 常见的有邻接表法,邻接矩阵,数组表示的方法 数组表示的方法: 例如:一个二维数组为{{1,2,3},{2,4,2},{4,5,1},{2,3,…

    Java 2023年6月13日
    080
  • 精通 Spring Boot 42 讲

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年5月30日
    085
  • java-TestNg-selenium

    随笔分类 – java-TestNg-selenium https://www.cnblogs.com/mashuqi/category/1404222.html Or…

    Java 2023年5月29日
    078
  • zookeeper_overview

    概述 zk 是一个开源的,分布式协调服务,它的目的就是为了服务于分布式应用。zk 允许分布式应用通过 zk 的节点进行相互协调,常见的有配置同步、分布式锁、微服务注册与发现等等。 …

    Java 2023年6月8日
    083
  • MongoDB 常用启动参数

    每日一句 Once you choose your way of life, be brave to stick it out and never return. 生活的道路一旦选…

    Java 2023年6月9日
    0189
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球