Spring Boot 整合 RabbitMQ:从入门到实践

server/2024/12/23 10:09:48/

在现代微服务架构中,消息队列(Message Queue)是实现服务之间异步通信的重要组件。RabbitMQ 作为一个功能强大的消息代理,提供了可靠的消息传递机制,广泛应用于分布式系统中。Spring Boot 作为 Java 生态中的主流框架,提供了与 RabbitMQ 的无缝集成,使得开发者能够快速构建基于消息队列的应用。

本文将详细介绍如何在 Spring Boot 项目中整合 RabbitMQ,并通过实际代码示例帮助你快速上手。

1. RabbitMQ 简介

1.1 什么是 RabbitMQ?

RabbitMQ 是一个开源的消息代理软件(Message Broker),它实现了高级消息队列协议(AMQP),并提供了多种消息传递模式,如点对点、发布/订阅等。RabbitMQ 支持多种编程语言,并且具有高可用性、可扩展性和可靠性。

1.2 RabbitMQ 的核心概念

  • Producer(生产者):发送消息的应用程序。
  • Consumer(消费者):接收消息的应用程序。
  • Queue(队列):存储消息的缓冲区,消息在队列中等待被消费。
  • Exchange(交换机):接收生产者发送的消息,并根据路由规则将消息分发到相应的队列。
  • Binding(绑定):定义了交换机和队列之间的关系,决定了消息如何路由到队列。
  • Routing Key(路由键):生产者发送消息时指定的键,用于交换机根据路由规则将消息分发到队列。

2. Spring Boot 整合 RabbitMQ

2.1 环境准备

在开始之前,请确保你已经安装了以下环境:

  • Java 8 或更高版本
  • Maven 或 Gradle
  • RabbitMQ 服务器(可以通过 Docker 快速启动)

你可以通过以下命令使用 Docker 启动 RabbitMQ 服务器:

docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

启动后,可以通过 http://localhost:15672 访问 RabbitMQ 的管理界面,默认用户名和密码为 guest/guest

2.2 创建 Spring Boot 项目

你可以通过 Spring Initializr 快速创建一个 Spring Boot 项目。选择以下依赖:

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

生成项目后,导入到你的 IDE 中。

2.3 配置 RabbitMQ

application.properties 文件中添加 RabbitMQ 的配置:

spring.rabbitmq.host=192.168.200.142
spring.rabbitmq.port=5672
spring.rabbitmq.virtual-host=/test
spring.rabbitmq.username=test
spring.rabbitmq.password=test

2.4 定义消息队列和交换机

在 Spring Boot 中,我们可以通过 @Bean 注解来定义 RabbitMQ 的队列、交换机和绑定关系。

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitMQConfig {public static final String QUEUE_NAME = "spring-boot-queue";public static final String EXCHANGE_NAME = "spring-boot-exchange";public static final String ROUTING_KEY = "spring-boot-routing-key";@Beanpublic Queue queue() {return new Queue(QUEUE_NAME, false);}@Beanpublic TopicExchange exchange() {return new TopicExchange(EXCHANGE_NAME);}@Beanpublic Binding binding(Queue queue, TopicExchange exchange) {return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY);}
}

2.5 发送消息

在 Spring Boot 中,我们可以通过 RabbitTemplate 来发送消息。

import com.allen.config.RabbitMQConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MessageController {@Autowiredprivate RabbitTemplate rabbitTemplate;@GetMapping("/send")public String sendMessage(@RequestParam String message) {rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, RabbitMQConfig.ROUTING_KEY, message);return "Message sent: " + message;}
}

2.6 接收消息

通过 @RabbitListener 注解,我们可以监听指定的队列并处理接收到的消息。

import com.allen.config.RabbitMQConfig;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class MessageListener {@RabbitListener(queues = RabbitMQConfig.QUEUE_NAME)public void receiveMessage(String message) {System.out.println("Received message: " + message);}
}

2.7 测试

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class TestSpringbootRabbitmqApplication {public static void main(String[] args) {SpringApplication.run(TestSpringbootRabbitmqApplication.class, args);System.out.println("系统已启动!");}
}

点击TestSpringbootRabbitmqApplication文件并启动 Spring Boot 应用,访问 http://localhost:8080/send?message=HelloRabbitMQ,你将在控制台看到如下输出:

Received message: HelloRabbitMQ

在这里插入图片描述

3. 总结

本文详细介绍了如何在 Spring Boot 项目中整合 RabbitMQ,并通过实际代码示例展示了如何发送和接收消息。通过 RabbitMQ,我们可以轻松实现服务之间的异步通信,提升系统的可扩展性和可靠性。


http://www.ppmy.cn/server/152462.html

相关文章

语言模型与向量模型:深入解析与实例剖析

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、Java 与 Python 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在未来…

数据结构与算法Python版 散列函数设计与冲突解决方案

文章目录 一、散列函数设计二、冲突解决方案三、映射 一、散列函数设计 散列函数设计-折叠法 基本步骤&#xff1a;将数据项按照位数分为若干段&#xff0c;再将几段数字相加&#xff0c;最后对散列表大小求余&#xff0c;得到散列值例如&#xff1a;电话号码62767255&#x…

ajax同步执行async:false无效的解决方法

无效的情况&#xff1a; function ManHourCheck() {var StartDate $("#StartDate").val();//日报日期var EndDate $("#EndDate").val();//完成日期var UserID $("#UserID").val();//员工ID$.ajax({async: false,//加了这一行也没用!!!!!!!!!!…

【大语言模型】ACL2024论文-28 TTM-RE: 增强记忆的文档级关系抽取

【大语言模型】ACL2024论文-28 TTM-RE: 增强记忆的文档级关系抽取 目录 文章目录 目录文章信息摘要研究背景问题与挑战如何解决创新点算法模型实验效果推荐阅读指数&#xff1a;★★★★☆ 后记 文章信息 TTM-RE: 增强记忆的文档级关系抽取 摘要 本文提出了TTM-RE&#xff…

面向对象编程:原理、实践与应用

面向对象编程&#xff1a;原理、实践与应用 一、编程范式的演进 &#xff08;一&#xff09;从面向过程到面向对象 编程领域的发展见证了编程范式的不断演进&#xff0c;其中面向过程编程和面向对象编程是两种具有重要影响力的范式。面向过程编程以其直观的步骤执行逻辑&…

JDBC 入门教程

Java Database Connectivity (JDBC) 是 Java 平台提供的一种与各种数据库连接的方式和规范。通过 JDBC&#xff0c;开发者可以在 Java 平台上完成数据库的查询、更新和操作。本文将详细认识 JDBC 的基础概念&#xff0c;并通过实战例子介绍其使用方法。 1. JDBC 概念 JDBC 接口…

qt 类中的run线程

在Qt中&#xff0c;QThread类的run()方法是线程的执行入口&#xff0c;它是由QThread内部自动调用的&#xff0c;而不是用户直接调用。 详细解释&#xff1a; QThread类&#xff1a; QThread是Qt的线程类&#xff0c;提供了用于多线程操作的接口。我们可以创建QThread对象并将…

文心一言对接FreeSWITCH实现大模型呼叫中心

文心一言对接FreeSWITCH实现大模型呼叫中心 作者&#xff1a;开源大模型智能呼叫中心FreeIPCC&#xff0c;Github&#xff1a;https://github.com/lihaiya/freeipcc 随着人工智能技术的快速发展&#xff0c;特别是大规模语言模型&#xff08;LLM&#xff09;的应用&#xff0…