RabbitMQ(003 四种交换机)

本文是一份12小时的动力节点RabbitMQ教程,详细讲解了消息中间件的工作模型,涉及直连、主题、扇形和头部交换机,以及如何配置参数和使用ApplicationRunner接口。教程还涵盖了队列绑定与解绑的关键概念和持久化设置。

动力节点RabbitMQ教程|12小时学会rabbitmq消息中间件

总时长 12:20:00 共65P

此文章包含第14p-第p16的内容


工作模型

在这里插入图片描述

这个比喻很好:
broker 相当于mysql服务器,
virtual host相当于数据库(可以有多个数据库)
queue相当于表,消息相当于记录。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

扇形交换机

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

参数为:交换机、路由key,消息信息
在这里插入图片描述

实现ApplicationRunner接口 这样程序一启动就会运行它的run方法
在这里插入图片描述
连接地址 本机
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

直连交换机

在这里插入图片描述
在这里插入图片描述

直连交换机
绑定key和发送key必须一模一样才能接收到

在这里插入图片描述

主题交换机

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

durable代表持久化 把数据从内存保存到硬盘上了
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

同一条消息在key匹配的情况里 如果一个队列有多种匹配key 在这条里也只加入一条消息 应该是有一条消息就引入
在这里插入图片描述
在这里插入图片描述

头部交换机

在这里插入图片描述

在这里插入图片描述

String…
代表0个或者多个字符串
**加粗样式**
在这里插入图片描述

在这里插入图片描述

绑定时代码都写到queueA上了 这里可以解绑(unbind)
在这里插入图片描述


### RabbitMQ 四种交换机类型及作用 #### 1. **直接交换机 (Direct Exchange)** 直接交换机是一种基于精确匹配键名的方式进行消息路由的机制。当生产者向该类型的交换机发送消息时,会指定一个 routing key。绑定队列时也需要提供相同的 routing key 值才能接收对应的消息[^1]。这种交换机适用于简单的场景,例如一对一的消息传递。 ```python # Python示例:创建 Direct Exchange 并绑定队列 import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() exchange_name = 'direct_exchange' queue_name = 'test_queue' # 创建 direct 类型的交换机 channel.exchange_declare(exchange=exchange_name, exchange_type='direct') # 绑定队列并设置 routing_key channel.queue_bind(queue=queue_name, exchange=exchange_name, routing_key='info') ``` --- #### 2. **扇出交换机 (Fanout Exchange)** 扇出交换机的作用是广播消息给所有与其绑定的队列,而无需考虑任何 routing key 的值。它非常适合用于通知类的应用程序,在这些应用中,所有的消费者都需要收到相同的消息副本[^2]。 ```python # Python示例:创建 Fanout Exchange 并绑定多个队列 import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() exchange_name = 'fanout_exchange' # 创建 fanout 类型的交换机 channel.exchange_declare(exchange=exchange_name, exchange_type='fanout') # 随机生成临时队列并与交换机绑定 result = channel.queue_declare('', exclusive=True) queue_name = result.method.queue channel.queue_bind(exchange=exchange_name, queue=queue_name) ``` --- #### 3. **主题交换机 (Topic Exchange)** 主题交换机允许通过通配符来实现更复杂的路由规则。其工作原理类似于直接交换机,但它支持模糊匹配模式。通常使用的通配符包括 `*` 和 `#`,分别表示单个单词和零个或多个单词[^4]。这使其成为处理多级分类的理想选择。 ```python # Python示例:创建 Topic Exchange 并使用通配符绑定队列 import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() exchange_name = 'topic_exchange' binding_keys = ['*.error', '*.warning'] # 创建 topic 类型的交换机 channel.exchange_declare(exchange=exchange_name, exchange_type='topic') for binding_key in binding_keys: channel.queue_bind(queue='log_queue', exchange=exchange_name, routing_key=binding_key) ``` --- #### 4. **头部交换机 (Headers Exchange)** 与其他三种不同的是,头部交换机不依赖于 routing key 来决定如何转发消息;而是依据消息属性中的 headers 字段来进行判断。如果某个队列所定义的一组 header 参数完全满足条件,则可以成功接受到相应数据包[^3]。 ```python # Python示例:创建 Headers Exchange 并按 Header 过滤消息 import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() exchange_name = 'headers_exchange' # 创建 headers 类型的交换机 channel.exchange_declare(exchange=exchange_name, exchange_type='headers') properties = pika.BasicProperties(headers={'type': 'urgent'}) # 发送带有自定义header的消息至交换机 channel.basic_publish( exchange=exchange_name, routing_key='', body='This is an urgent message', properties=properties ) ``` --- ### 总结 每一种交换机都有各自的特点以及适用范围: | 名称 | 路由方式 | 使用场景 | |-----------------|------------------------------|-----------------------------------| | Direct Exchange | 完全匹配 | 单一目标地址投递 | | Fanout Exchange | 不关心Routing Key | 大规模广播 | | Topic Exchange | 支持通配符 | 动态订阅 | | Headers Exchange| 根据Header字段 | 特殊需求下的精准控制 | 以上就是关于RabbitMQ四种主要交换机的功能描述及相关代码实例展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值