【RabbitMQ】通配符模式(Topics)

一、基本概念

  • 生产者(Producer):发送消息到RabbitMQ交换机的程序。生产者定义消息的路由键,用于标识消息的目的地。
  • 交换机(Exchange):接收生产者发送的消息,并根据路由键和绑定规则将消息路由到相应的队列。在通配符模式中,常用的交换机类型是主题交换机(Topic Exchange)。
  • 队列(Queue):存储消息的缓冲区。消费者从队列中接收消息。队列与交换机的绑定需要指定通配符表达式(Binding Pattern),用于指定消息的接收规则。
  • 消费者(Consumer):从队列中接收消息并进行处理的程序。消费者通过通配符匹配来订阅感兴趣的消息。
  • 路由键(Routing Key):由生产者定义,用于标识消息的目的地。路由键通常由一个或多个单词组成,单词之间用点(.)分隔。
  • 通配符表达式(Binding Pattern):由消费者定义,用于指定消息的接收规则。通配符表达式可以包含多个单词和通配符符号(* 和 #),以及点号(.)进行分隔。

二、通配符规则

  • #:匹配零个或多个单词。
  • *(星号):匹配不多不少恰好一个单词。

例如,路由键“news.sports.#”可以匹配诸如“news.sports.football”和“news.sports.tennis”等多个消息,而路由键“news.sports.*”只能匹配到一个消息,如“news.sports.football”。

三、工作流程

  1. 生产者发送消息
    • 生产者连接到RabbitMQ服务器。
    • 生产者声明一个主题交换机(如果需要的话)。
    • 生产者将消息发送到交换机,并指定路由键。
  2. 交换机路由消息
    • 交换机接收到消息后,根据消息的路由键和队列的通配符表达式进行匹配。
    • 如果队列的通配符表达式与消息的路由键匹配,则将该消息路由到该队列。
  3. 消费者接收消息
    • 消费者连接到RabbitMQ服务器,并声明一个或多个队列。
    • 消费者使用通配符表达式来指定他们感兴趣的消息。
    • 消费者从队列中接收匹配的消息并进行处理。

四、特点

  • 灵活性:通配符模式允许消费者使用通配符来订阅感兴趣的消息,从而提高了消息传递的灵活性。
  • 精确匹配:通过定义精确的通配符表达式,消费者可以准确地接收他们感兴趣的消息,避免了不必要的消息传递。
  • 可扩展性:随着系统的发展,可以轻松地添加新的路由键和队列,而无需修改现有的生产者和消费者代码。

五、应用场景

RabbitMQ的通配符模式适用于需要根据消息的不同属性或条件将消息路由到不同队列的场景,例如:

  • 日志处理:不同类型的日志消息可以根据日志类型、来源、级别等属性被路由到不同的处理器或存储位置。
  • 事件通知:应用程序可以根据事件类型、用户、组件等条件向特定用户或组件发送事件通知。
  • 多租户系统:在多租户环境中,每个租户可能需要独立处理其数据和事件。通配符模式可以将消息路由到特定租户的队列,以实现数据隔离和独立处理。
  • 分布式监控:在监控系统中,不同类型的监控数据可以根据监控类型、监控对象等条件被路由到不同的处理器或仪表板。

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

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

相关文章

一款.NET开源、跨平台的DASH/HLS/MSS下载工具

前言 今天大姚给大家分享一款.NET开源(MIT License)、免费、跨平台的DASH/HLS/MSS下载工具,并且支持点播和直播(DASH/HLS)的内容下载:N_m3u8DL-RE。 网络流媒体传输协议介绍 DASH DASH是一种基于HTTP的…

2024年8月1日(前端服务器的配置以及tomcat环境的配置)

[rootstatic ~]# cd eleme_web/ [rootstatic eleme_web]# cd src/ [rootstatic src]# ls views/ AboutView.vue HomeView.vue [rootstatic src]# vim views/HomeView.vue [rootstatic src]# nohup npm run serve nohup: 忽略输入并把输出追加到"nohup.out" 构建项目…

零基础入门转录组数据分析——机器学习算法之boruta(筛选特征基因)

零基础入门转录组数据分析——机器学习算法之boruta(筛选特征基因) 目录 零基础入门转录组数据分析——机器学习算法之boruta(筛选特征基因)1. boruta基础知识2. boruta(Rstudio)——代码实操2. 1 数据处理…

机器学习之贝叶斯方法

机器学习之贝叶斯方法 1. 贝叶斯定理基础1.1 贝叶斯定理公式1.2 先验概率 (Prior Probability)1.3 后验概率 (Posterior Probability)1.4 似然 (Likelihood)1.5 证据 (Evidence)1.6 贝叶斯定理的应用实例 2. 贝叶斯方法的基本概念2.1 条件概率 (Conditional Probability)2.2 全…

Python SDK 使用Azure Document intelligence报错(404) Resource not found

最近项目需要使用到Azure Document intelligence,于是去做POC,但是发现最简单的demo跑的时候都会报这个错,解决了一下午终于搞定了,记录下。 首先是官方文档:Quickstart: Document Intelligence (formerly Form Recognizer) clien…

反序列化漏洞vulhub靶场serial

环境搭建 下载 https://download.vulnhub.com/serial/serial.zip 解压出来就是这种 你会得到一个这样的文件,这里使用VMware新建一个虚拟机,这里记录比较重要的几部分。 这里就是使用我们刚才下过来的。 漏洞过程详解 1.信息收集 打开靶机&#xff0…

IDEA切换分支,会影响当前在跑的项目吗?

说明:本文测试,在IDEA中运行项目,然后切换分支,是否会影响当前正在跑的项目 准备工作 首先,创建一个Git项目,接口如下: import org.springframework.web.bind.annotation.GetMapping; import…

13. 文本框和单选题

属性说明type指定元素的类型。text、password、checkbox、radio、submit、reset、file、hidden、image和button,默认为textname指定表单元素的名称value元素的初始值。type为radio时必须指定一个值size指定表单元素的初识宽度,当type为text或password时&…

3.Java面试题之AQS

1. 写在前面 AQS(AbstractQueuedSynchronizer)是Java并发包(java.util.concurrent)中的一个抽象类,用于实现同步器(如锁、信号量、栅栏等)。AQS提供了一种基于FIFO队列的机制来管理线程的竞争和…

【RabbitMQ】路由模式(Routing)

一、基本概念 生产者(Producer):发送消息到交换机的程序。在发送消息时,需要指定一个路由键。交换机(Exchange):接收生产者发送的消息,并根据路由键将消息路由到与之匹配的队列。在…

1.kafka面试题之零拷贝

1. 写在前面 Kafka 是一个高性能的分布式消息系统,它使用了多种优化技术来提高数据传输效率,其中之一就是 “零拷贝”(Zero Copy)。零拷贝技术可以显著减少数据在内存中的复制次数,从而提高 I/O 操作的效率&#xff0…

volatile 关键字的两层语义

volatile 关键字的两层语义 1、可见性2、禁止指令重排序3、工作机制4、总结 💖The Begin💖点点关注,收藏不迷路💖 volatile 关键字在Java并发编程中扮演着重要角色,它主要用于保证变量的可见性和禁止指令重排序。 1、…

python绘图 | 横坐标是日期,纵坐标是数值

需求 profit_value [0.084, 0.225, 0.234, 0.264, 0.328] time_stamp [20221111, 20230511, 20230704, 20231212, 20240315] 横坐标是日期,纵坐标是数值,我想绘图的时候,横坐标是按日期格式来 代码 from matplotlib import pyplot as pl…

Mallet:一款针对任意协议的安全拦截代理工具

关于Mallet Mallet是一款功能强大的协议安全分析工具,该工具支持针对任意协议创建用于安全审计的拦截代理,该工具本质上与我们所熟悉的拦截Web代理类似,只是通用性更强。 工具运行机制 Mallet建立在Netty框架之上,并且依赖于Net…

ThreadLocal:线程本地变量的作用与应用

ThreadLocal:线程本地变量的作用与应用 1、简介2、作用3、应用场景4、注意事项 💖The Begin💖点点关注,收藏不迷路💖 1、简介 ThreadLocal 是Java中一个强大的工具类,用于创建线程局部变量。它为每个使用该…

7.Redis的Hash类型

Hash类型,也叫散列,其value是一个无序字典,类似于HashMap结构。 问题 String结构是将对象序列化为json字符串后存储,当需要修改对象某个字段是不是很方便。 key value…

AHK是让任何软件都支持 Shift + 鼠标滚轮 实现界面水平滚动

目录 基本介绍 详细特点 图解安装 下载失败?缓慢? 创建并运行脚本代码😃 新建空 xxx.ahk文件 vscode/记事本等编辑工具打开 复制并粘贴简易脚本 运行 其他问题 问题一:弹出无法执行此脚本 关闭脚本 基本介绍 AutoHot…

大厂面试必备的软件测试八股文【附答案】

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 前言 最近有很多粉丝问我,有什么方法能够快速提升自己,通过阿里、腾讯、字节跳动、京东等互联网大厂的面试,我觉得短时间提升…

【全网最全最详细】MYSQL 面试题大全(下)

目录 五十一、MYSQL主从复制的过程? 五十二、介绍一下InnbDB的数据页,和B+树的关系是什么? 五十三、MYSQL的驱动表是什么?如何选驱动表? 五十四、MYSQL的hash join是什么? 五十五、MYSQL执行大事务会存在什么问题? 五十六、什么是buffer pool? 五十七、buffer p…

软件测试--兼容性测试

兼容性测试综述 软件兼容性测试是指检查软件之间是否能够正确的交互和共享信息 交互可以同时运行于同一台计算机上的两个程序之间,甚至在相隔几千公里通过因特网连接的不同计算机上的两个程序之间进行。还可以离线介质如导出到介质然后导入到其他计算机的其他软件…