在RabbitMQ中四种常见的消息路由模式

1. Fanout模式

Fanout模式的交换机是扇出交换机Fanout Exchange),它会将消息广播给所有绑定到它的队列,而不考虑消息的内容或路由键。

工作原理:
  • 生产者发送消息到Fanout Exchange
  • Fanout Exchange会将消息广播给所有绑定到它的队列,所有绑定的队列都会收到这条消息。
  • 消费者监听绑定的队列,处理收到的消息。
特点:
  • 没有路由键:消息不需要路由键,所有绑定的队列都会接收到消息。
  • 广播机制:消息会被广播到所有与交换机绑定的队列,而不管消息内容。
应用场景:
  • 广播系统消息:适合需要通知多个服务模块或系统节点的场景。
  • 日志系统:将日志消息广播到多个日志处理服务。
exchange_type = 'fanout'
exchange = channel.exchange_declare(exchange='logs', exchange_type=exchange_type)

2. Direct模式

Direct模式使用直连交换机Direct Exchange),通过消息的**路由键(Routing Key)**来精确匹配队列。如果生产者的消息路由键和队列绑定的路由键相同,消息就会被分发到该队列。

工作原理:
  • 生产者发送带有路由键的消息到Direct Exchange
  • Direct Exchange根据消息的路由键,将消息精确地分发给绑定了相同路由键的队列。
  • 消费者监听对应的队列,处理符合路由键的消息。
特点:
  • 精确路由:消息根据路由键精确匹配队列。
  • 一对一或多对一:不同队列可以绑定不同的路由键,确保只有匹配的队列收到消息。
应用场景:
  • 日志系统:将不同级别的日志(info、error、warning)发送到不同的日志处理队列。
  • 分布式任务:根据任务类型(如task_type_1task_type_2)精确分发任务
exchange_type = 'direct'
exchange = channel.exchange_declare(exchange='direct_logs', exchange_type=exchange_type)

# Binding with specific routing key
channel.queue_bind(exchange='direct_logs', queue='error_logs', routing_key='error')

3. Topic模式

Topic模式使用主题交换机Topic Exchange),允许使用通配符进行消息路由。消息的路由键由一个点分隔的字符串组成,队列可以通过通配符绑定到交换机,实现模糊匹配。

工作原理:
  • 生产者发送带有路由键的消息到Topic Exchange,路由键由点分隔的多个单词组成,例如"logs.info", "user.create", "order.payment.success".
  • 队列绑定到Topic Exchange时,可以使用通配符匹配多个路由键:
    • *匹配一个单词。
    • #匹配零个或多个单词。
  • 消费者监听队列,接收符合通配符规则的消息。
特点:
  • 模糊匹配:消息根据路由键的模式进行模糊匹配。
  • 灵活路由:支持复杂的路由需求,允许将相似类别的消息路由到同一个队列。
应用场景:
  • 消息分类处理:适合需要对复杂系统中的消息进行分类的场景,比如基于用户操作类型、订单状态等。
  • 多模块事件处理:可以为不同的模块创建灵活的订阅机制。
exchange_type = 'topic'
exchange = channel.exchange_declare(exchange='topic_logs', exchange_type=exchange_type)

# Binding queue with topic patterns
channel.queue_bind(exchange='topic_logs', queue='system_logs', routing_key='logs.*')
channel.queue_bind(exchange='topic_logs', queue='all_logs', routing_key='#')

4. 头部模式

头部模式使用头部交换机Headers Exchange),不同于Direct和Topic模式,它不是通过路由键来路由消息,而是通过消息的头部属性来路由。队列绑定到交换机时会指定一组头部键值对,只有当消息的头部属性匹配这些键值对时,消息才会被路由到相应的队列。

工作原理:
  • 生产者发送带有头部属性的消息到Headers Exchange
  • 队列绑定到Headers Exchange时,会指定匹配条件(例如x-match=all表示所有头部键值对都必须匹配,x-match=any表示只要有一个匹配即可)。
  • 交换机根据头部属性将消息分发给符合条件的队列。
特点:
  • 基于头部字段路由:不依赖路由键,消息的头部属性决定消息的路由。
  • 更复杂的路由逻辑:适合需要根据多种属性组合来路由的场景。
应用场景:
  • 消息过滤:适合需要根据消息的多个属性来进行复杂过滤的场景,比如需要根据来源、优先级等多个条件筛选消息。
  • 高度灵活的路由逻辑:当单纯依赖路由键不足以满足需求时,使用头部模式更合适。
exchange_type = 'headers'
exchange = channel.exchange_declare(exchange='header_logs', exchange_type=exchange_type)

# Binding queue with header matching criteria
channel.queue_bind(exchange='header_logs', queue='error_logs', arguments={'x-match': 'all', 'type': 'error', 'format': 'json'})

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【软考】数据字典(DD)

目录 1. 说明2. 数据字典的内容2.1 说明2.2 数据流条目2.3 数据存储条目2.4 数据项条目2.5 基本加工条目 3. 数据词典管理4. 加工逻辑的描述4.1 说明4.2 结构化语言4.3 判定表4.3 判定树 5. 例题5.1 例题1 1. 说明 1.数据流图描述了系统的分解,但没有对图中各成分进…

一个基于 laravel 和 amis 开发的后台框架, 友好的组件使用体验,可轻松实现复杂页面(附源码)

前言 随着互联网应用的发展,后台管理系统的复杂度不断增加,对于开发者而言,既要系统的功能完备,又要追求开发效率的提升。然而,传统的开发方式往往会导致大量的重复劳动,尤其是在构建复杂的管理页面时。有…

【移动端开发】“明日头条APP”

文章目录 1 系统概述1.1研究背景1.2研究意义 2 系统设计2.1 关键技术2.2 系统设计2.2.1 系统功能模块2.2.2 数据库设计 3 系统实现3.1 数据模型3.1.1 NewsURL3.1.2 NewsType3.1.3 NewsInfo 3.2 数据库操作3.2.1 DBOpenHelper3.2.2 DBManager 3.3 适配器类3.3.1 AddItem3.3.2 In…

Redhat 7,8,9系(复刻系列) 一键部署Oracle19c rpm

Oracle19c前言 Oracle 19c 是甲骨文公司推出的一款企业级关系数据库管理系统,它带来了许多新的功能和改进,使得数据库管理更加高效、安全和可靠。以下是关于 Oracle 19c 的详细介绍: 主要新特性 多租户架构:支持多租户架构,允许多个独立的数据库实例在同一个物理服务器上…

【机器学习】9 ——最大熵模型的直观理解

机器学习9 ——最大熵模型的直观理解 文章目录 机器学习9 ——最大熵模型的直观理解前奏例子硬币垃圾邮件代码 前奏 【机器学习】6 ——最大熵模型 例子 硬币 假设我们有一枚硬币,可能是公平的,也可能是不公平的。我们的任务是估计硬币的正反面出现的…

通过Python代码发送量化交易信号邮件通知

量化交易利用数学模型和计算机算法来分析市场数据,并生成交易信号,本文将介绍如何使用Python编写一个简单的脚本,通过发送邮件通知量化交易信号。 开启SMTP服务 首先要在发件箱的邮件设置中,将POP3/SMPT服务开启,记录下授权密码,在本地可通过此密码登录,注意有效期和保…

微信小程序页面制作——婚礼邀请函(含代码)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

【网络】TCP/IP 五层网络模型:网络层

最核心的就是 IP 协议,是一个相当复杂的协议 TCP 详细展开讲解,是因为 TCP 确实在开发中非常关键,经常用到,IP 则不同,和普通程序猿联系比较浅。和专门开发网络的程序猿联系比较紧密(开发路由器&#xff0…

3款免费的GPT类工具

前言 随着科技的飞速发展,人工智能(AI)的崛起与发展已经成为我们生活中不可或缺的一部分。它的出现彻底改变了我们与世界互动的方式,并为各行各业带来了前所未有的便利。 一、Kimi 网址:点我前往 国产AI模型Kimi是一…

neo4j安装启动教程+对应的jdk配置

参考这位博主的视频教程:neo4j社区windows版下载 一、官网下载neo4j的安装包 (1)官网下载页面 (2)上一步 【download】之后,会自动下载,如果没有,点击【here】 这里可以看到一行字…

Qwen 2.5:阿里巴巴集团的新一代大型语言模型

Qwen 2.5:阿里巴巴集团的新一代大型语言模型 摘要: 在人工智能领域,大型语言模型(LLMs)的发展日新月异,它们在自然语言处理(NLP)和多模态任务中扮演着越来越重要的角色。阿里巴巴集…

获取参数

获取querystring参数 querystring 指的是URL中 ? 后面携带的参数,例如:http://127.0.0.1:9090/web?query杨超越。 获取请求的querystring参数的方法如下: 方法1: Query package main// querystringimport ("github.com/…

有毒有害气体检测仪的应用和性能_鼎跃安全

随着现代工业的不断发展和扩张,越来越多的企业涉及到有毒有害气体的生产、使用和处理。工业规模的扩大导致有毒有害气体的排放量增加,同时也增加了气体泄漏的风险。在发生火灾、爆炸或危险化学品泄漏等紧急事件时,救援人员需要迅速了解现场的…

python+flask+mongodb+vue撸一个实时监控linux服务资源的网站

用pythonflaskmongodbvue写一个监控linux服务资源实时使用率的页面网站,并每30秒定时请求,把Linux数据保存数据到mongodb数据库中,监控的linux的资源有:cup、内存、网络带宽、mysql慢查询、redis、系统平均负载、磁盘使用率等&…

百度Android IM SDK组件能力建设及应用

作者 | 星途 导读 移动互联网时代,随着社交媒体、移动支付、线上购物等行业的快速发展,对即时通讯功能的需求不断增加。对于各APP而言,接入IM SDK(即时通讯软件开发工具包)能够大大降低开发成本、提高开发效率&#…

动手学习RAG:大模型重排模型 bge-reranker-v2-gemma微调

动手学习RAG: 向量模型动手学习RAG: moka-ai/m3e 模型微调deepspeed与对比学习动手学习RAG:rerank模型微调实践 bge-reranker-v2-m3动手学习RAG:迟交互模型colbert微调实践 bge-m3动手学习RAG: 大模型向量模型微调 intfloat/e5-mistral-7b-instruct动手学…

Leetcode Hot 100刷题记录 -Day14(矩阵置0)

矩阵置0 问题描述: 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2:…

模版进阶(template)

1.非类型模版参数 模版参数分类类型形参与非类型形参。 ① 类型形参:出现在在模板参数列表中,跟在class或者typename之类的参数类型名称。 ② 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当…

鸿蒙Harmony应用开发,数据驾驶舱登录页面的实现

鸿蒙Harmony应用开发,数据驾驶舱登录页面的实现 ​ 首先我们有个Splash 过渡页面来判断当前是用户是否登录,我们先从preferences中获取token是否存在。如果不存在直接跳转登录即可,如果存在的情况我们再去获取下用户的信息看看token是否过期…

【leetcode】树形结构习题

二叉树的前序遍历 返回结果:[‘1’, ‘2’, ‘4’, ‘5’, ‘3’, ‘6’, ‘7’] 144.二叉树的前序遍历 - 迭代算法 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,…