RabbitMQ是怎么做消息分发的?——Java全栈知识(14)

RabbitMQ是怎么做消息分发的?

RabbitMQ 的消息分发分为五种模式:分别是简单模式、工作队列模式、发布订阅模式、路由模式、主题模式。

1、简单模式

image.png|900

  • publisher 直接发送消息到队列
  • 消费者监听并处理队列中的消息
    简单模式是最基本的工作模式,也是最简单的消息传递模式。在简单模式中,一个生产者将消息发送到一个队列中,一个消费者从队列中获取并处理消息。这种模式适用于单个生产者和单个消费者的简单场景,消息的处理是同步的。

2、工作队列模式

image.png|900
Work queues,工作队列模式。简单来说就是让多个消费者绑定到一个队列,共同消费队列中的消息。
当消息处理比较耗时的时候,可能生产消息的速度会远远大于消息的消费速度。长此以往,消息就会堆积越来越多,无法及时处理。
此时就可以使用 work 模型,多个消费者共同处理消息处理,消息处理的速度就能大大提高了。

3、发布/订阅模式(Fanout 交换机)

image.png|900

  • 1)  可以有多个队列
  • 2)  每个队列都要绑定到 Exchange(交换机)
  • 3)  生产者发送的消息,只能发送到交换机
  • 4)  交换机把消息发送给绑定过的所有队列
  • 5)  订阅队列的消费者都能拿到消息
    也就相较于工作队列模式来讲,工作队列中的一条消息只有一个消费者消费,由多个消费者进行消费,不会出现重复消费。
    发布订阅模式的交换机会把一条消息分发到每个队列中,然后由队列绑定的消费者消费,也就是一条消息由所有的消费者消费

4、路由模式(Direct 交换机)

在 Fanout 模式中,一条消息,会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到 Direct 类型的 Exchange。
image.png|900
在 Direct 模型下:

  • 队列与交换机的绑定,不能是任意绑定了,而是要指定一个 RoutingKey(路由 key)
  • 消息的发送方在向 Exchange 发送消息时,也必须指定消息的 RoutingKey
  • Exchange 不再把消息交给每一个绑定的队列,而是根据消息的 Routing Key 进行判断,只有队列的 Routingkey 与消息的 Routing key 完全一致,才会接收到消息

5、主题模式(Topic 交换机)

Topic 类型的 ExchangeDirect 相比,都是可以根据 RoutingKey 把消息路由到不同的队列。
只不过 Topic 类型 Exchange 可以让队列在绑定 BindingKey 的时候使用通配符!
图示:
image.png
假如此时 publisher 发送的消息使用的 RoutingKey 共有四种:

  • china.news 代表有中国的新闻消息;
  • china.weather 代表中国的天气消息;
  • japan.news 则代表日本新闻
  • japan.weather 代表日本的天气消息;
    解释:
  • topic.queue1:绑定的是 china.# ,凡是以 china. 开头的 routing key 都会被匹配到,包括:
    • china.news
    • china.weather
  • topic.queue2:绑定的是 #.news ,凡是以 .news 结尾的 routing key 都会被匹配。包括:
    • china.news
    • japan.news

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/832396.shtml

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

相关文章

Satellite, Aerial, and Underwater Communication Track(WCSP2023)

1.Dispersion Curve Extraction and Source Localization for Single Hydrophone by Combining Image Skeleton Extraction with Advanced Time-Frequency Analysis(图像骨架提取与先进时频分析相结合的单水听器色散曲线提取和源定位) 摘要:时频分析(TF…

数据仓库基础理论(学习笔记)

数据仓库基础理论 1.数据仓库概念 2.数据仓库为何而来 3.数据仓库主要特征 4.OLTP、OLAP系统 5.数据仓库与数据库的区别 6.数据仓库与数据集市的区别 7.数据仓库分层架构 7.1为什么要分层? 8.ETL、ELT

爱普生S2D13V52快速实现车载显示屏高分辨率显示系统

随着时代的发展,汽车驾驶位前中央的显示屏承担的功能也越来越多,从一开始仅仅是显示仪表盘的信息,再到作为显示屏辅助倒车,再到如今和一块平板一样可公认娱乐,显示屏的大小有些时候成为了一辆车够不够好的体现。随着汽…

本科生毕业设计答辩模板

答辩模板一:学术性答辩模板 尊敬的各位评委老师: 大家好!我是来自XX大学的学生XXX。今天我将就我的毕业论文《XXXXXX》进行答辩。我选择这个主题进行研究的动机是……,这主要体现在以下几个方面:…… 在准备论文的过程…

【网络安全】记一场完整实战SRC漏洞挖掘(超详细)全过程

前言 记录一次完整的某SRC漏洞挖掘实战,为期一个多星期。文章有点长,请耐心看完,记录了完整的SRC漏洞挖掘实战 渗透过程 因为选择的幸运儿没有对测试范围进行规划,所以此次范围就是没有范围。 先上主域名看一眼,看…

SQLite3简单操作

SQLite命令 文章目录 SQLite命令一、创建数据库二、表的操作1、创建表2、删除表 一、创建数据库 注:使用Ubuntu服务器操作,安装sqlite3 sudo apt update sudo apt install sqlite3 sqlite3 --version1、SQLite主要使用命令sqlite3来创建新的数据库 sq…

Error: error:0308010C:digital envelope routines::unsupported 问题如何解决

Error: error:0308010C:digital envelope routines::unsupported 通常与 Node.js 的加密库中对某些加密算法的支持有关。这个错误可能是因为 Node.js 的版本与某些依赖库不兼容导致的。特别是在 Node.js 17 版本中,默认使用 OpenSSL 3,而一些旧的加密方式…

【动态规划算法】【Python实现】最长公共子序列

文章目录 [toc]问题描述最长公共子序列的结构子问题的递归结构 c [ i ] [ j ] c[i][j] c[i][j]递归方程 时间复杂性构造最长公共子序列Python实现算法的改进 问题描述 给定两个序列 X { x 1 , x 2 , ⋯ , x m } X \set{x_{1} , x_{2} , \cdots , x_{m}} X{x1​,x2​,⋯,xm​…

银行卡实名认证API接口快速对接

银行卡实名认证API接口又叫银行卡核验类API接口、银行卡验证类API接口、银联核验类API接口,根据入参字段不同,分银行卡二要素验证API接口,银行卡三要素验证API接口,银行卡四要素验证API接口。其中,银行卡二要素验证API接口是验证开…

BeanUtils工具类中的copyProperties方法

1.两个包下BeanUtils.copyProperties对比 BeanUtils工具类主要通过导入org.springframework.beans.BeanUtils或者org.apache.commons.beanutils.BeanUtils包来获取,但是不同包中BeanUtils的方法是不一样的,让我们通过实例看看这两者的不同之处吧。 …

BEV下统一的多传感器融合框架 - FUTR3D

BEV下统一的多传感器融合框架 - FUTR3D 引言 在自动驾驶汽车或者移动机器人上,通常会配备许多种传感器,比如:光学相机、激光雷达、毫米波雷达等。由于不同传感器的数据形式不同,如RGB图像,点云等,不同模态…

AHB---原子性

1. 单拷贝原子性大小 单拷贝原子性大小定义了一个传输被保证以原子方式更新的数据字节数。 单拷贝原子性大小是为一组通信组件定义的。例如: 一个处理器、一个数字信号处理器(DSP)和一个动态随机存取存储器(DRAM)控…

TypeError报错处理

哈喽,大家好,我是木头左! 一、Python中的TypeError简介 这个错误通常表示在方法调用时,参数类型不正确,或者在对字符串进行格式化操作时,提供的变量与预期不符。 二、错误的源头:字符串格式化…

动力电池热管理方案介绍与发展方向

摘要 随着电动汽车的快速发展,高性能的动力电池系统成为推动电动汽车产业发展的重要因素。然而,伴随着能量密度提高和放电深度增加,电池热管理问题逐渐凸显。良好的热管理方案能够提高电池的寿命,保障电池性能,延长电…

【C语言刷题系列】移除元素

目录 一、问题描述 二、解题思路 三、源代码 个人主页: 倔强的石头的博客 系列专栏 :C语言指南 C语言刷题系列 一、问题描述 二、解题思路 在C语言中,原地移除数组中所有等于特定值的元素并返回新长度的问题可以通过双指针法…

Linux:进程信号(一)信号的产生

目录 一、信号是什么? 二、Linux信号 三、信号处理方式 四、信号的产生 1、 通过终端按键产生信号 2、调用系统函数向进程发信号 3、 硬件异常产生信号 一、信号是什么? 在生活中,有许多信号,比如红绿灯,下课铃声…

ChatGPT搜索引擎要来了,但它面临的麻烦还不少 | 最新快讯

界面新闻记者 | 陈振芳 界面新闻编辑 | 宋佳楠 新晋人工智能霸主OpenAI开始挑战搜索市场格局。 OpenAI很可能推出基于ChatGPT技术的新搜索引擎。5月6日,界面新闻注意到,名为“GPT Search”的网页已经上线,但目前只有会员才能访问。 上述消息…

机器人感知导读

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言【传感器sensor】机器人/无人驾驶常用传感器模型、选型与安装车道线检测&交通信号识别&车辆实时检测【目标检测与定位…

TCP连接请求为什么要有三次握手?两次不行吗?

在TCP/IP网络协议中,三次握手是建立可靠的会话连接的一个重要机制。三次握手的过程确保了双方(客户端和服务器)都能确认彼此的接收和发送能力是否正常。这一过程不仅用于同步双方的初始序列号,还确保了连接的可靠性和数据的完整性…

后缀字串排序

直接sort: #include <iostream> #include <cstring> #include <algorithm> #include <vector>using namespace std;int main() {string str;cin >> str;int len str.size();vector<string> strings;for(int i 0; i < len; i){strin…