RabbitMQ是一个开源的消息代理软件。它接受来自生产者的消息并将其传递给消费者。它就像一个中间人,可以用来减少Web应用程序服务器的负载和交付时间。

RabbitMQ如何工作

让我们简要介绍一下RabbitMQ的工作原理。

让我们首先熟悉RabbitMQ的一些重要概念:

  • 生产者:发送消息的应用程序。

  • 消费者:接收消息的应用程序。

  • 队列:存储消息的缓冲区。

  • 消息:通过RabbitMQ从生产者发送给消费者的信息。

  • 连接:连接是应用程序和RabbitMQ代理之间的TCP连接。

  • 通道:通道是连接内的虚拟连接。当您从队列中发布或使用消息时 - 它们都是通过通道完成的。

  • Exchange:接收来自生产者的消息,并根据交换类型定义的规则将其推送到队列。要接收消息,需要将队列绑定到至少一个交换。

  • 绑定:绑定是队列和交换之间的链接。

  • 路由密钥:路由密钥是交换机查看的密钥,用于决定如何将消息路由到队列。路由密钥就像消息的地址。

生产者将消息发送/发布给代理 - > 消费者从代理接收消息。RabbitMQ是生产者和消费者之间的通信中间件,即使它们在不同的机器上运行。

当生产者向队列发送消息时,它不会直接发送,而是使用交换机发送。下面的设计演示了主要的三个组件如何相互连接。

负责将消息路由到不同队列的交换代理。这样消息就可以从生产者接收到交换机,然后再次转发到队列。这被称为“发布”方法。

消息将从队列中获取并消耗; 这被称为'消费'。

将消息发送到多个队列

通过使用更复杂的应用程序,我们将拥有多个队列。因此消息将在多个队列中发送它。

向多个队列交换发送消息通过绑定和路由密钥连接到队列。绑定是您设置为将队列连接到交换机的“链接”。Routing键是一个消息属性。在决定如何将消息路由到队列时(取决于交换类型),交换机可能会查看此密钥。

消息中心

消息不会直接发布到队列,而是生成器将消息发送到交换机。一个交换负责的消息不同队列的路由。一个交换接受来自生产应用程序的消息并将其路由消息队列与绑定和路由键的帮助。阿结合是队列和交换之间的链接。

RabbitMQ中的消息流

  • 制片人将消息发布到交换。创建交换时,必须指定它的类型。稍后将详细说明不同类型的交换。

  • 交换接收消息,现在负责该消息的路由。交换机将不同的消息属性考虑在内,例如路由密钥,具体取决于交换类型。

  • 必须从交换到队列创建绑定。在这种情况下,我们看到来自交换的两个不同队列的两个绑定。Exchange根据邮件属性将邮件路由到队列中。

  • 消息留在队列中,直到消费者处理它们

  • 消费者处理消息。

交换类型

  1. 直接:直接交换基于消息路由密钥将消息传递到队列。

  2. 扇出:扇出交换将消息路由到绑定到它的所有队列。

  3. 主题:主题交换在路由密钥和绑定中指定的路由模式之间进行通配符匹配。

  4. 标头:标头交换使用邮件标头属性进行路由。

RabbitMQ核心概念

在深入挖掘RabbitMQ之前,需要先介绍一些重要的概念。

  • 生产者:发送消息的应用程序。

  • 消费者:接收消息的应用程序。

  • 队列:存储消息的缓冲区。

  • 消息:通过RabbitMQ从生产者发送给消费者的信息。

  • 连接:连接是应用程序和RabbitMQ代理之间的TCP连接。

  • 通道:通道是连接内的虚拟连接。当您从队列中发布或使用消息时 - 它们都是通过通道完成的。

  • Exchange:接收来自生产者的消息,并根据交换类型定义的规则将其推送到队列。要接收消息,需要将队列绑定到至少一个交换。

  • 绑定:绑定是队列和交换之间的链接。

  • 路由密钥:路由密钥是交换机查看的密钥,用于决定如何将消息路由到队列。路由密钥就像消息的地址。

  • AMQP:AMQP(高级消息队列协议)是RabbitMQ用于消息传递的协议。

  • 用户:可以使用给定的用户名和密码连接到RabbitMQ。可以为每个用户分配权限,例如在实例中读取,写入和配置权限的权限。

RabbitMQ如何工作和RabbitMQ核心概念的更多相关文章

  1. RabbitMQ核心概念篇

    RabbitMQ介绍 一.RabbitMQ使用场景 RabbitMQ他是一个消息中间件,说道消息中间件[最主要的作用:信息的缓冲区]还是的从应用场景来看下: 1.系统集成与分布式系统的设计 各种子系统 ...

  2. RabbitMq核心概念和术语

    简介 越来越多的消息中间件很容易让人产生混淆,在学习一种消息中间件的时候,最好先了解他的几种抽象概念,方便你理解,明白了这些概念,你学习起来的时候也就得心应手,同时也是使用好RabbitMQ的基础. ...

  3. 消息中间件——RabbitMQ(三)理解RabbitMQ核心概念和AMQP协议!

    前言 本章学习,我们可以了解到以下知识点: 互联网大厂为什么选择RabbitMQ? RabbiMQ的高性能之道是如何做到的? 什么是AMQP高级协议? AMQP核心概念是什么? RabbitMQ整体架 ...

  4. 消息中间件——RabbitMQ(六)理解Exchange交换机核心概念!

    前言 来了解RabbitMQ一个重要的概念:Exchange交换机 1. Exchange概念 Exchange:接收消息,并根据路由键转发消息所绑定的队列. 蓝色框:客户端发送消息至交换机,通过路由 ...

  5. RabbitMQ核心概念和AMQP协议(二)

    RabbitMQ是什么? RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议,在完全不同的应用之间共享数据,RabbirMQ是使用Erlang语言来编写的,并且RabbitMQ是基于A ...

  6. RabbitMQ 核心概念

    目录 RabbitMQ 特点 AMQP 协议 RabbitMQ 消息传递机制 Message Exchange 1. 简介 2. 类型 3. 属性 RabbitMQ 特点 RabbitMQ 相较于其他 ...

  7. java面试一日一题:rabbitMQ的工作模式

    问题:请讲下rabbitMQ的工作模式 分析:该问题纯属概念题,需要掌握rabbtiMQ的基础知识,同时该题也是切入MQ的一个引子: 回答要点: 主要从以下几点去考虑, 1.rabbitMQ的基本概念 ...

  8. (二)RabbitMQ消息队列-RabbitMQ消息队列架构与基本概念

    原文:(二)RabbitMQ消息队列-RabbitMQ消息队列架构与基本概念 没错我还是没有讲怎么安装和写一个HelloWord,不过快了,这一章我们先了解下RabbitMQ的基本概念. Rabbit ...

  9. RabbitMQ六种工作模式有哪些?怎样用SpringBoot整合RabbitMQ

    目录 一.RabbitMQ入门程序 二.Work queues 工作模式 三.Publish / Subscribe 发布/订阅模式 四.Routing 路由模式 五.Topics 六.Header ...

随机推荐

  1. Bandwagon的配置记录(一) —— kexue上网

    写在前面 这是kexue上网的一种方法. 看文章前,先拉最底下,看一遍“写在最后”. 租个服务器 我租了个洛杉矶的服务器,系统是ubuntu16.04 x86_64 进入KiwiVM Control ...

  2. 【同余方程组】POJ1006 生理周期

    同余方程组: 先来看一道题目:有物不知其数,三三数之剩二:五五数之剩三:七七数之剩二.问物几何?  然后我们可以做如下变换,设x为所求的数. x%3=2              x ≡ a1(%m1 ...

  3. 中间人攻击——ARP欺骗的原理、实战及防御

    ​ 1.1 什么是网关 首先来简单解释一下什么是网关,网关工作在OSI七层模型中的传输层或者应用层,用于高层协议的不同网络之间的连接,简单地说,网关就好比是一个房间通向另一个房间的一扇门. 1.2 A ...

  4. InputStream和Reader,FileInputStream和 FileReader的区别

    一.InputStream和Reader的区别 InputStream和Reader都可以用来读数据(从文件中读取数据或从Socket中读取数据),最主要的区别如下: InputStream用来读取二 ...

  5. 音视频编解码技术(二):AAC 音频编码技术

    一.AAC编码概述 AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术,目的是取代MP3格式.2000年,MPEG-4标准 ...

  6. JS数组slice()和splice()的区别

    以前还是纯小白的时候,总会搞混JS数组的 slice() 和 splice() 方法.因为这2个方法名字太像了,就差一个字母,语法也有类似之处.    现在久了没用,有时候也会忘记,所以做一个总结来区 ...

  7. Python—day13 迭代器、迭代器对象、for循环对象、生成器、枚举对象

    一.迭代器 1.迭代器概念: 器:包含了多个值的容器 迭代:循环反馈(一次从容器在取出一个值) 迭代器:从装有多个值的容器在一次取出一个值 ls=[3,5,7,1,9] 遍历:被遍历的对象必须是有序容 ...

  8. AttributeError: module 'pip' has no attribute 'main'

    Pycharm在运行pip安装模块是报错如下: 解决方法: 找到安装路径下的packaging_tool.py文件修改如下: 我的路径为D:\Program Files\JetBrains\PyCha ...

  9. C# Serialize

    一.序列化又称为串行化,是.NET运行时环境用来支持用户自定义类型的机制,目的是以某种存储给对象持久化,或者是将这种对象传输到另一个地方, 二. .NET框架提供了两种序列化的方式 一种是使用Bina ...

  10. 什么样的IT业务适合外包?

    很多公司都应该遇到过这样的问题,什么样的IT业务才适合外包呢? 百度大家都可以百度的到一些信息,比如: 针对这样的推荐答案,是否也需要认真思考一下,我需要外包的业务是什么样的业务?是不是真的适合外包? ...