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. CSS Media媒体查询使用大全,完整媒体查询总结

    前面的话 一说到响应式设计,肯定离不开媒体查询media.一般认为媒体查询是CSS3的新增内容,实际上CSS2已经存在了,CSS3新增了媒体属性和使用场景(IE8-浏览器不支持).本文将详细介绍媒体查 ...

  2. [Swift]LeetCode306. 累加数 | Additive Number

    Additive number is a string whose digits can form additive sequence. A valid additive sequence shoul ...

  3. [Swift]LeetCode593. 有效的正方形 | Valid Square

    Given the coordinates of four points in 2D space, return whether the four points could construct a s ...

  4. [Swift]LeetCode784. 字母大小写全排列 | Letter Case Permutation

    Given a string S, we can transform every letter individually to be lowercase or uppercase to create ...

  5. Python内置函数(56)——set

    英文文档: class set([iterable]) Return a new set object, optionally with elements taken from iterable. s ...

  6. BBS论坛(十三)

    13.1点击更换图形验证码 (1)front/signup.html <div class="form-group"> <div class="inpu ...

  7. BBS论坛(四)

    4.1.cms登录页面csrf保护 (1)Perfect_bbs.py from flask_wtf import CSRFProtect CSRFProtect(app) 添加csrf保护后,现在再 ...

  8. nginx替换响应头(重点:如何在替换时加上if判断)

    在实现微信小程序内嵌非业务域名时,通过nginx做镜像网站绕过小程序业务域名检测,但有一些表单页面提交后会返回一个302状态,由响应头Location的值决定提交成功后的跳转地址.那么问题来了,这个地 ...

  9. MVC的App_Code这个特殊文件夹

    对于一个之前编译一点都没有问题的项目,突然间调试就出现了一个报错: 然而你会天真的认为,这个真的是using的问题吗!别傻了,我检查了一遍又一遍: 首先这个是有using的! 其实代码编写上也是没有报 ...

  10. java基础(三)-----java的三大特性之多态

    面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...