RabbitMQ图解

2023-05-16

RabbitMQ是一个消息队列软件,称为消息代理或队列管理器。简单地说, 这是一个可以定义队列的软件,应用程序可以连接到队列并将消息传输到队列中。


消息可以包括任何类型的信息。 例如,它可以具有从另一个应用程序(可能在另一个服务器上)开始的进程/任务的信息,或者它可以只是一个简单的文本消息。队列管理器软件存储消息,直到接收应用程序连接并从队列中取出消息。然后接收应用程序以适当的方式处理消息。


RabbitMQ 例子

message broker可以充当各种服务的中间人(例如,在这个例子中为web应用程序)。它们可以用来减少Web应用程序服务器的负载和交付时间,因为通常需要相当多的时间来处理的任务可以委托给只执行它们的第三方。
在本文中,我们遵循Web应用程序允许用户将信息上载到网站的场景。该网站将处理这些信息并生成PDF并将其发回给用户。处理信息,生成PDF和发送电子邮件将在这个示例中花费几秒钟,这也是为什么使用消息队列的原因之一。
当用户将用户信息输入到Web界面时,Web应用程序会将“PDF处理”任务和所有信息放入消息中,并将消息放置到RabbitMQ中定义的队列中。


消息队列的基本体系结构很简单,有一些客户端应用程序称为producer,用于创建消息并将其交付给broker(消息队列)。其他应用程序(称为consumer)连接到队列并订阅要处理的消息。软件可以是producer,consumer,也可以既是producer也是consumer。 放置在队列中的消息将被存储直到consumer检索它们。


何时以及为什么要使用RabbitMQ?

消息队列允许Web服务器快速响应请求,而不是被迫在现场执行资源繁重的过程。如果要将消息分发给多个接受者进行消费或平衡工作人员之间的负载,则消息排队也很有用。
当producer在队列中排队新消息的同时,consumer可以接收队列消息并开始处理PDF。consumer可以与发布者位于完全不同的服务器上,也可以位于同一台服务器上。 该请求可以用一种编程语言创建,并以另一种编程语言来处理 - 两个应用程序只能通过它们发送给对方的消息进行通信。因此,这两个应用程序在发送者和接收者之间具有低耦合。


1、用户向Web应用程序发送PDF创建请求。
2、Web应用程序(producer)向RabbitMQ发送消息,包括来自请求的数据,如姓名和电子邮件。
3、交换接受来自producer应用程序的消息,并将它们路由到正确的消息队列用于创建PDF。
4、PDF处理工作者(consumer)接收任务并开始处理PDF。


EXCHANGES
消息不会直接发布到队列中,而是producer将消息发送到exchange。exchange负责将消息路由到不同的队列。exchange接受来自procuder应用程序的消息,并借助bindings和路由密钥将它们路由到消息队列。
bindings是队列和交换机之间的链接。


RabbitMQ中的消息流


1、producer向exchange发布消息,当你创建exchangge时,必须指定其类型。
2、exchange收到消息,现在负责消息的路由。exchange根据交换类型考虑不同的消息属性,例如路由密钥。
3、Bindings必须从交换到队列创建。 在这种情况下,我们看到来自交换机的两个不同队列的两个Bindings。 Exchange根据消息属性将消息路由到队列中。
4、消息保留在队列中,直到由consumer处理。
5、Consumer处理消息。


EXCHANGE的类型

·Direct:直接交换基于消息路由密钥将消息传递给队列。在直接交换中,消息被路由到binding密钥与消息的路由密钥完全匹配的队列。如果队列绑定到具有绑定密钥pdfprocess的交换机,那么发布到具有路由密钥pdfprocess的交换机的消息将被路由到该队列。
·Fanout:fanout exchange将消息路由到绑定到它的所有队列。
·Topic: topic exchange在路由密钥和bidding中指定的路由模式之间进行通配符匹配。
·Headers:Headers exchanges使用消息标题属性进行路由。


参考:

https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RabbitMQ图解 的相关文章

随机推荐

  • 关于利用结构体和联合体数据收发的两种方法

    关于利用结构体和联合体数据收发的两种方法 关于最近接手的小项目 xff0c 有了一些经验 xff0c 所以进行一下记录 文章目录 关于利用结构体和联合体数据收发的两种方法前言一 联合体法二 结构体法小tips 前言 在我们利用自己的板子进行
  • RESTful初探之四(Restlets)

    size 61 large Restlets Restlet项目为 建立REST概念与Java类之间的映射 提供了一个轻量级而全面的框架 它可用于实现任何种类的REST式系统 xff0c 而不仅仅是REST式Web服务 color 61 r
  • FreeRTOS中的堆栈设置”与“系统启动文件中堆栈”的关系

    FreeRTOS中的堆栈设置 与 系统启动文件中堆栈 的关系 在STM32CubeMX生成工程时发现 xff0c 在FreeRTOS的配置中同样有TOTAL HEAP SIZE堆的大小配置 xff0c 这个堆与之前系统的堆空间有什么区别呢
  • nodejs 实现http账号密码Digest登录认证

    const http 61 require 39 http 39 const qs 61 require 39 querystring 39 const md5 61 require 39 md5 node 39 第一步 xff1a 获取n
  • PCB Layout各层含义与分层原则

    内容包括 PCB绘图软件各层含义的详细介绍以及一些在实际工作中的应用 xff0c Layout时多层板分层原则与阻抗匹配 紫色文字是超链接 xff0c 点击自动跳转至相关博文 持续更新 xff0c 原创不易 xff01 目录 xff1a 一
  • 2021-01-18

    求助 xff0c 关于Ubuntu20 04安装网络调试助手打不开的问题 我在虚拟机上安装了Ubuntu20 04并安装了网络调试助手 xff0c 但却打不开 xff0c 运用了sudo apt get libqtgui4 amd64也没用
  • 笔记:VSCode C/C++ 格式化修改设置

    VSCode安装C C 43 43 插件后 xff0c 就有了格式化代码的能力 xff0c 这个功能很好用 xff0c 一般来说不用改就可以用的很嗨皮 为啥要改默认设置 xff0c 只因不喜欢函数内大括号独占一行 xff0c 如此一屏显示的
  • NEMA 协议:GPRMC数据格式

    NEMA协议的由来 NMEA协议是为了在不同的GPS xff08 全球定位系统 xff09 导航设备中建立统一的BTCM xff08 海事无线电技术委员会 xff09 标准 xff0c 由美国国家海洋电子协会 xff08 NMEA The
  • 大小端(网络字节序)等概念

    1 大小端定义 大端存储模式 xff1a 是指数据的低位字节序保存在内存的高地址中 xff0c 而数据的高位字节序保存在内存的低地址中 小端存储模式 xff1a 是指数据的低位字节序保存在内存的低地址中 xff0c 而数据的高位字节序保存在
  • [李景山php]RHEL\CentOS 7\ubuntu16.04 下 MySQL 连接数被限制为214个

    问题 项目中 xff0c 由于连接数过多 xff0c 提示 Too many connections xff0c 需要增加连接数 我在 etc my cnf中修改了 max connections 61 2000 但是 xff0c 实际连接
  • 关系型数据库和非关系型数据库的特性以及各自的优缺点

    数据库 类型特性优点缺点关系型数据库 SQLite Oracle mysql1 关系型数据库 xff0c 是指采用了关系模型来组织 数据的数据库 xff1b 2 关系型数据库的最大特点就是事务的一致性 xff1b 3 简单来说 xff0c
  • 采用libuv的epoll方式实现的异步高性能libcurl发送数据的方法

    Libcurl较为基本的用法是easyinterface xff0c 它是最简单的同步接口 xff0c 容易理解 xff0c 实现代码简单 xff0c 但是性能低下 curl multi perform 43 select xff1a 可以
  • 各种浏览器语言包、国际化如何配置

    size 61 large 如果web项目使用了国际化多语言包 xff0c 切换浏览器语言包可以切换语言 xff1a color 61 red Firefox如何中英文切换 color 首先得下载语言包 xff0c 网址 xff1a url
  • libcurl采用curl_multi_perform() + curl_multi_wait()方式实现异步高性能l发送数据的方法

    前两篇文章 c c 43 43 调用libcurl库发送http请求的两种基本用法 采用libuv的epoll方式实现的异步高性能libcurl发送数据的方法 讲述了采用libcurl发送数据的基础方法和高性能方法 xff0c 基础方法较为
  • 网络库libevent、libev、libuv对比

    Libevent libev libuv 三个网络库 xff0c 都是c 语言实现的异步事件库Asynchronousevent library xff09 异步事件库本质上是提供异步事件通知 xff08 Asynchronous Even
  • 记flume部署过程中遇到的问题以及解决方法(持续更新)

    项目需求是将线上服务器生成的日志信息实时导入kafka xff0c 采用agent和collector分层传输 xff0c app的数据通过thrift传给agent xff0c agent通过avro sink将数据发给collector
  • c++11多线程编程(一):创建线程的三种方法

    c 43 43 11线程库 原始的c 43 43 标准仅支持单线程编程 xff0c 新的c 43 43 标准 xff08 c 43 43 11或c 43 43 0x xff09 于2011年发布 xff0c 引入了新的线程库 编译器要求 L
  • c++11多线程编程(六):事件处理

    本节讨论在多线程环境下的事件处理 有时 xff0c 线程需要等待某事件发生 xff0c 比如一个条件变为true xff0c 或者某任务被另一个线程完成 例如 xff0c 我们创建一个基于网络的应用程序 xff0c 处理如下的任务 xff1
  • C++11智能指针(六):unique_ptr介绍与例子

    本节介绍下c 43 43 11提供的智能指针实现 std unique ptr lt gt 什么是std unique ptrunique ptr lt gt 是c 43 43 11提供的智能指针实现之一 xff0c 用于防止内存泄漏 un
  • RabbitMQ图解

    RabbitMQ是一个消息队列软件 xff0c 称为消息代理或队列管理器 简单地说 xff0c 这是一个可以定义队列的软件 xff0c 应用程序可以连接到队列并将消息传输到队列中 消息可以包括任何类型的信息 例如 xff0c 它可以具有从另