RabbitMQ是一个开源的消息代理(Message Broker)软件通过,高级消息队列协议(AMQP, Advanced Message Queuing Protocol),用于在分布式系统中传递消息,支持异步通信、解耦应用程序组件、负载均衡和消息持久化等功能。下面我们就来介绍一下如何在Spring Boot项目中整合并且使用RabbitMQ。
通过Docker搭建RabbitMQ环境
第一步、拉取RabbitMQ的镜像
??首先,从 Docker Hub 拉取 RabbitMQ 镜像
docker pull rabbitmq:management
??这里需要注意rabbitmq:management 是带有管理插件的版本,方便通过Web界面管理RabbitMQ,但是要注意生产环境中避免泄露管理页面导致安全隐患的发生。
第二步、运行RabbitMQ
??我们可以通过如下的命令来启动RabbitMQ容器
docker run -d --hostname my-rabbit --name some-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:management
- -d:后台运行容器。
- --hostname my-rabbit:设置容器主机名。
- --name some-rabbit:为容器命名。
- -p 5672:5672:映射 RabbitMQ 的默认端口 5672。
- -p 15672:15672:映射管理插件的 Web 界面端口 15672。
第三步、访问RabbitMQ管理界面
??启动后,通过浏览器访问 http://localhost:15672,使用默认用户名 guest 和密码 guest 登录。
第四步、停止和启动容器
docker stop some-rabbit
docker start some-rabbit
# 删除容器、需要先停止容器之后再进行删除
docker stop some-rabbit
docker rm some-rabbit
使用 Docker Compose
??使用 Docker Compose 可以更方便地管理 RabbitMQ。如下所示是一个docker-compose.yml文件。
version: '3'
services:
rabbitmq:
image: rabbitmq:management
container_name: some-rabbit
hostname: my-rabbit
ports:
- "5672:5672"
- "15672:15672"
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: password
??然后就可以通过如下的命令启动
docker-compose up -d
docker-compose stop
docker-compose down # 停止并删除容器
在Spring Boot整合RabbitMQ
??这里我们通过spring-boot-starter-amqp模块来实现与RabbitMQ的整合连接。
第一步、引入依赖
??首先,我们需要创建一个Spring Boot的项目然后在项目POM文件中引入相关的依赖配置。
org.springframework.boot
spring-boot-starter-amqp
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
provided
第二步、配置RabbitMQ的连接
??我们可以在application.properties 或 application.yml 中配置 RabbitMQ 连接信息,如下所示。
# RabbitMQ 配置
spring.rabbitmq.host=192.168.1.202
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
??上面的连接使用的用户名和密码,可以在使用Docker Compose的时候进行自定义修改。
第三步、配置队列
??添加好配置连接之后,接下来我们就来创建一个用来发送消息的消息队列。如下所示。
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitMQConfig {
@Bean
public Queue myQueue() {
return new Queue("myQueue", false); // 队列名称:myQueue,非持久化
}
}
第四步、创建消息生产者
??这里我们通过RESTFul接口来创建一个简单的消息生产者,如下所示。
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 {
@Autowired
private RabbitTemplate rabbitTemplate;
@GetMapping("/send")
public String sendMessage(@RequestParam String message) {
// 发送消息到队列 "myQueue"
rabbitTemplate.convertAndSend("myQueue", message);
return "Message sent: " + message;
}
}
第五步、创建消息消费者
??有了消息生产者之后,接下来,我们需要创建一个消费者用来监听myQueue队列,来接收并且处理该队列的消息。
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class MessageListener {
@RabbitListener(queues = "myQueue")
public void receiveMessage(String message) {
System.out.println("Received message: " + message);
}
}
第六步、运行测试
??配置完成之后,接下来我们就可以启动项目,然后通过浏览器或者是通过Postman等工具调用如下的接口来发送一个消息。
http://localhost:8080/send?message=HelloRabbitMQ
??然后就可以在控制台日志中看到如下的内容输出。
Received message: HelloRabbitMQ
??有了这些之后,我们就完成了一个简单的Spring Boot与RabbitMQ的整合项目实现,当然,我们也可以通过这个简单的示例代码来深入的了解更高级的Rabbit的用法。
总结
??上面我们介绍了如何通过Docker来安装并且运行一个RabbitMQ的容器实例,并且通过简答的Spring Boot的代码来对RabbitMQ进行了连接,当然RabbitMQ提供的功能远远不止这些,在后续的分享中我们还会基于这个项目进行深入的探索,希望大家多多关注,敬请期待。
Tags:rabbitmq管理页面地址