RabbitMQ的交换机与队列

一、流程

首先先介绍一个简单的一个消息推送到接收的流程,提供一个简单的图

黄色的圈圈就是我们的消息推送服务,将消息推送到 中间方框里面也就是 rabbitMq的服务器,然后经过服务器里面的交换机、队列等各种关系(后面会详细讲)将数据处理入列后,最终右边的蓝色圈圈消费者获取对应监听的消息。

二、交换机类型

常用的交换机有以下三种,因为消费者是从队列获取信息的,队列是绑定交换机的,所以对应的消息推送/接收模式也会有以下几种:

1、Direct Exchange

直连型交换机,根据消息携带的路由键将消息投递给对应队列。

大致流程,有一个队列绑定到一个直连交换机上,同时赋予一个路由键 routing key 。

然后当一个消息携带着路由值为abc,这个消息通过生产者发送给交换机时,交换机就会根据这个路由值abc去寻找绑定值的队列。

新建直流交换机

绑定信息 

### RabbitMQ 交换机队列的工作原理 #### 交换机 (Exchange) 在 RabbitMQ 中,交换机负责接收生产者发送的消息并将这些消息路由到一个或多个队列交换机本身并不存储消息;它的主要职责是根据特定的规则将消息分发给合适的队列。 不同的交换机类型决定了如何处理接收到的消息: - **Direct Exchange**: 路由键完全匹配的情况下才会转发消息至对应的队列。 - **Fanout Exchange**: 不考虑路由键,广播方式向所有绑定此交换机队列复制一份消息[^4]。 - **Topic Exchange**: 支持通配符模式匹配的方式决定哪些队列应该接受某条消息。 - **Headers Exchange**: 基于消息头属性而不是路由键来选择目标队列。 #### 队列 (Queue) 队列是用来保存等待被消费的消息集合。当消费者连接上之后就可以从中取出并处理消息。为了增强系统的可靠性可用性,可以设置 `durable` 参数使队列成为持久化的,在服务器重启后仍然存在[^2]。 #### 绑定关系 (Binding) 通过定义 binding 可以建立 exchange queue 间的关联,即指定某个具体的 exchange 应该怎样将消息投递给哪个 queue。这通常涉及到提供一个 routing key 或其他条件作为筛选依据。例如,使用 Java 客户端库时可以通过如下代码实现绑定操作: ```java channel.queueBind(queueName, EXCHANGE_NAME, RouterKey); ``` 这里 `(queueName, EXCHANGE_NAME, RouterKey)` 分别代表要绑定的目标队列名称、源交换机名以及可选的路由关键字[^3]。 --- ### 配置方法 对于 Spring Boot 应用程序来说,借助 spring-boot-starter-amqp 自动化配置功能能够轻松完成对 RabbitMQ 的初始化工作,包括但不限于声明必要的 exchanges、queues bindings 等资源对象[^1]。 具体而言,在 application.yml 文件内添加类似下面的内容即可满足基本需求: ```yaml spring: rabbitmq: host: localhost port: 5672 username: guest password: guest rabbitmq: queues: myQueue: name: 'my_queue' durable: true exchanges: myExchange: type: fanout name: 'my_exchange' bindings: - destination: myQueue source: myExchange key: '' ``` 上述 YAML 片段展示了如何利用应用程序属性文件快速搭建起一套简单的消息传递基础设施框架——创建了一个名为 "my_exchange" 的扇形交换器,并将其同样具有持久性的 "my_queue" 进行了无条件绑定。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值