SpringBoot项目整合RabbitMQ三种交换机类型实例

本文介绍了RabbitMQ的基本概念,包括消息队列、交换器和队列之间的关系。详细讲解了SpringBoot项目中集成RabbitMQ的步骤,并通过实例展示了Direct、Topic和Fanout三种交换机类型的使用,解释了不同交换机类型的消息转发策略。最后,提供了发送者和接收者的代码示例,帮助理解RabbitMQ在实际应用中的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、RabbitMQ介绍

       RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。在分布式的系统中,消息队列也会被用在很多其它的方面,比如:分布式事务的支持,RPC 的调用等等。

二、相关概念

在这里插入图片描述
通常我们谈到队列服务, 会有三个概念: 发消息者、队列、收消息者,RabbitMQ 在这个基本概念之上, 多做了一层抽象, 在发消息者和 队列之间, 加入了交换器 (Exchange). 这样发消息者和队列就没有直接联系, 转而变成发消息者把消息给交换器, 交换器根据调度策略再把消息再给队列。
交换机(Exchange)
交换机的功能主要是接收消息并且转发到绑定的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误。交换机有四种类型:Direct, topic, Headers and Fanout

Direct:direct 类型的行为是"先匹配, 再投送". 即在绑定时设定一个 routing_key, 消息的routing_key 匹配时, 才会被交换器投送到绑定的队列中去.
Topic:按规则转发消息(最灵活)
Headers:设置 header attribute 参数类型的交换机
Fanout:转发消息到所有绑定队列

三、SpringBoot集成RabbitMQ

1、添加jar包
在pom.xml文件中添加相关依赖

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-amqp</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-test</artifactId>
		</dependency>

2、配置RabbitMQ
在application.properties文件中添加相关配置信息:
在这里插入图片描述

这里填写成你本地或者远程服务器搭好的RabbitMQ信息。
3、配置文件
我们这里写三种交换机类型的绑定实现:
a:direct类型:

package com.example.demo.confi
### Spring Boot 集成 RabbitMQ 交换机与队列的工厂初始化实现 在 Spring Boot 中,可以通过声明式的配置类来完成 RabbitMQ交换机、队列以及绑定关系的初始化。以下是具体的实现方式: #### 添加依赖 为了支持 RabbitMQ 功能,在项目的 `pom.xml` 文件中需引入以下 Maven 依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ``` 此依赖会自动导入 RabbitMQ 所需的核心库和 Spring AMQP 支持[^2]。 #### 创建配置类 通过定义一个 Java 配置类,可以利用 Spring 提供的 Bean 定义机制来初始化交换机、队列及其绑定关系。下面是一个完整的示例代码: ```java import org.springframework.amqp.core.*; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class RabbitMqConfig { // 定义队列 @Bean public Queue myQueue() { return new Queue("my.queue", true, false, false); } // 定义交换机 @Bean public TopicExchange myExchange() { return new TopicExchange("my.exchange"); } // 绑定队列到交换机 @Bean public Binding binding(Queue myQueue, TopicExchange myExchange) { return BindingBuilder.bind(myQueue).to(myExchange).with("routing.key"); } } ``` 在此代码片段中,分别创建了一个持久化的队列 (`my.queue`) 和一个主题类型交换机 (`my.exchange`) 并将其绑定在一起,指定路由键为 `"routing.key"`[^3]。 #### 工厂模式下的自定义初始化 如果需要更复杂的逻辑控制或者动态参数化,则可通过继承默认的工厂类来自定义行为。例如,重写 `DirectExchange`, `FanoutExchange`, 或者 `TopicExchange` 来满足特定业务场景的要求。 对于高级特性如 **死信队列 (DLQ)** ,也可以通过扩展的方式实现: ```java @Bean public Queue deadLetterQueue() { Map<String, Object> args = new HashMap<>(); args.put("x-dead-letter-exchange", "dlx.exchange"); // 死信转发的目标交换机名称 args.put("x-message-ttl", 60000); // 设置消息存活时间(ms),超时进入 DLX return new Queue("dead.letter.queue", true, false, false, args); } ``` 上述例子展示了如何基于参数化构造函数传递额外属性给队列实例,从而启用死信功能[^3]。 --- #### 性能优化建议 当面对高并发环境时,考虑调整线程池大小或预取计数等性能调优选项可能有助于提升吞吐量和服务稳定性。这些设置通常位于 application.properties/yml 文件下,比如: ```properties spring.rabbitmq.listener.simple.concurrency=5-10 spring.rabbitmq.listener.direct.prefetch=10 ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值