文章目录
消息队列的意义在于异步发送数据或者请求,可以用于整个流程较慢但又不用过度关注结果的操作,比如发送验证码、输出数据到文件······
安装
1. 安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror aliyun
2. 启动docker
systemctl start docker
3. 拉取rabbitmq镜像
docker pull rabbitmq:management
4. 运行rabbitmq镜像
docker run -itd --name rabbit01 --hostname myrabbit -e RABBITMQ_DEFAULT_USER=zxt -e RABBITMQ_DEFAULT_PASS=zxt -p 15672:15672 -p 5672:5672 -p 25672:25672 rabbitmq:management
RABBITMQ_DEFAULT_USER
和RABBITMQ_DEFAULT_PASS
填用户名和密码
5. 浏览器访问
http://192.168.190.128:15672/
主机号+端口(默认15672)
6. 创建队列
整合到springboot
依赖
<!--rabbitmq依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
application
spring:
rabbitmq:
host: 192.168.190.128
port: 5672
username: zxt
password: zxt
# 连接超时时间
connection-timeout: 15000
消费者
queues={" "} 填的是队列名
fileBody 是队列存放的信息
@Service
public class RabbitmqConsumer {
@RabbitListener(queues = {"ffms01"})
public void receive(@Payload String fileBody) {
System.out.println("ffms01:"+fileBody);
}
}
配置类
把队列对象放到spring的容器里
@Configuration
public class RabbitConfig {
@Bean
public Queue ffms01(){
return new Queue("ffms01",true);
}
}
发送者
rabbitTemplate 是操作rabbitmq的对象
queue01 是被操作的那个队列对象
msg 是要发送的消息内容,方法一般被controller层调用,传入消息
@Service
@RequiredArgsConstructor
public class RabbitmqSender {
private final RabbitTemplate rabbitTemplate;
private final Queue queue01;
public void sendMsg(String msg){
rabbitTemplate.convertAndSend(queue01.getName(),msg);
}
}
简单用controller层测试一下
@Controller
@RequestMapping("/mq")
public class MQController {
@Resource
private RabbitmqSender sender;
@RequestMapping("/statement")
public void downloadStatement(){
sender.sendMsg("测试下载报表的功能");
}
}