RabbitMQ系列学习笔记(七)--RabbitMQ交换机

devtools/2024/10/21 22:24:50/

文章目录

  • 一、Exchange概念
  • 二、交换机类型
  • 三、无名交换机
  • 四、绑定(bindings)

本文参考:
尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq
RabbitMQ 详解
Centos7环境安装Erlang、RabbitMQ详细过程(配图)

一、Exchange概念

RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列。实际上,通常生产者甚至都不知道这些消息传递传递到了哪些队列中。
相反,生产者只能将消息发送到交换机 (exchange),交换机工作的内容非常简单,一方面它接收来自生产者的消息,另一方面将它们推入队列。交换机必须确切知道如何处理收到的消息,是应该把这些消息放到特定队列还是说把他们放到许多队列中还是说应该丢弃它们。这就得由交换机的类型来决定。
image.png

二、交换机类型

RabbitMQ 的交换机大致可分为以下四类:

  • Fanout:广播(扇出):将消息交给所有绑定到交换机的队列。
  • Direct:直接(路由):把消息交给符合指定routing key 的队列。
  • Topic:通配符(主题):把消息交给符合routing pattern(路由模式) 的队列。
  • headers:标题:headers信息类型交换机,通过消息内容中的headers属性匹配队列。

在本系列笔记中已经介绍了两种RabbitMQ的工作方式,分别是简单模式(hello world)和工作队列模式(work queue),这两种工作方式都是基于Direct直接交换机,也是RabbitMQ默认的交换机。后面会将剩余集中模式逐一展开介绍,而最后一种headers交换机性能较差,在实际中并不常用。

三、无名交换机

在之前的例子中,使用channel.basicPublish("",QUEUE_NAME,null,message.getBytes());进行消息发送,这里第一个参数就是指定交换机的类型,虽然使用了空字符串"",仍然能实现将消息发送到指定队列,实际上,这里使用的是RabbitMQ的默认直接交换机(Direct Exchange),消息能路由发送到队列中其实是由routingKey(bindingkey)绑定key指定的,这里由于第二个参数指定了队列的名称,因此默认的直接交换机Direct根据routingKey将消息发送到指定的队列。

四、绑定(bindings)

那么什么是binding呢,binding其实是exchange和queue之间的桥梁,它告诉我们exchange和那个队列进行了绑定关系。比如说下面这张图告诉我们的就是X与Q1和Q2进行了绑定。
image.png
binding的对应关系如下:

  • 一个交换机可以和多个队列绑定。
  • 一个交换机可和一个队列建立多个绑定关系(routingKey不同)。

研究完RabbitMQ的交换机基本原理,后面将继续介绍剩余的RabbitMQ工作模式,他们是分别基于不同类型的交换机来实现的,并且对应不同的用法。


http://www.ppmy.cn/devtools/127667.html

相关文章

除GOF23种设计模式之简单工厂模式

文章目录 1. 简介2. 代码2.1 抽象类:Course.java2.2 产品A:JavaCourse.java2.3 产品B:PythonCourse.java2.4 工厂:CourseFactory.java2.5 测试:Test.java 3. 心得参考链接(无) 1. 简介 简单工厂模式(Simple Factory Patern):又称…

《柬埔寨语翻译通》App:技术驱动的语言翻译解决方案,高精度的高棉语OCR识别技术分享

2023年,一款全新的高棉语翻译应用《柬埔寨语翻译通》正式面向公众发布。这款应用不仅支持中文与高棉语的双向翻译,还集成了语音播放、翻译历史自动保存等高级功能,极大地提高了用户的语言学习效率和跨文化交流的便捷性。 核心功能与技术亮点…

物流管理系统设计与实现

摘 要 本物流管理系统是针对目前物流管理系统管理的实际需求,从实际工作出发,对过去的物流管理系统管理系统存在的问题进行分析,结合计算机系统的结构、概念、模型、原理、方法,在计算机各种优势的情况下,采用目前jsp…

使用 rbenv 安装 Ruby 2.7.5

如果尚未安装 rbenv,可以使用 Homebrew 安装它: brew install rbenv brew install ruby-build初始化 rbenv: rbenv init在终端中运行以下命令将 rbenv 添加到你的 shell 中: open .bash_profile复制代码到文件中 eval “$(rbenv…

售后管理系统 解锁服务效率与质量双重提升

售后管理系统通过提升响应速度、确保服务一致性、数据分析优化流程,提高企业售后服务质量。ZohoDesk等解决方案可自动化分配工单、多渠道支持、管理追踪工单等,增强客户满意度和忠诚度。 一、什么是售后管理系统 首先,我们需要了解什么是售后…

git版本控制软件,操作方法

git版本库操作 1. 注册用户信息 git config --global (邮箱和用户名) 2. 创建工作区 git init 3. 编写文件 vim readme.txt 4. 把文件放到暂存区 git add readme.txt 5. 查看工作区状态 git status 6. 把文件放到本地版本库里 git commit -m "" filename 7. 查看日志…

OpenCV高级图形用户界面(7)获取指定窗口的属性值函数getWindowProperty()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 提供窗口的参数。 函数 getWindowProperty 返回窗口的属性。 cv::getWindowProperty() 函数用于获取指定窗口的属性值。这个函数允许你查询窗口…

成都睿明智科技有限公司共创抖音电商新篇章

在当今这个数字化浪潮汹涌的时代,抖音电商以其独特的魅力迅速崛起,成为众多商家竞相追逐的新蓝海。在这片充满机遇与挑战的领域中,成都睿明智科技有限公司凭借其专业的服务、创新的策略和敏锐的市场洞察力,成为了众多商家信赖的合…