前提
你得保证你的RabbitMQ可以访问管理页面,同时你得放开5672这个端口,如果使用docker的话有下面这个效果就可以了。
问题产生
这里产生的主要的问题就是因为RabbitMQ没有产生对应的消息队列导致你提交的消息RabbitMQ并不会创建一个队列来存这个消息,所以我们要解决这个问题的就是你得建立一个实实在在的队列之后才向对应的RabbitMQ的对应交换机里面的对应的队列发送有效的数据,这样才可以被RabbitMQ保存下来,一般建立一个监听,让这个监听在项目开始的时候就监听一个队列就可以了。
解决方案
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
</dependencies>
application.yml
spring:
application:
name: RabbittMQSpringAMQP1
rabbitmq:
host: 192.168.247.105
port: 5672
virtual-host: /
username: pengpeng
password: pengpeng
listener:
type: simple
simple:
acknowledge-mode: manual
test.java
package com.example.rabbittmqspringamqp1;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class RabbittMqSpringAmqp1ApplicationTests {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
void contextLoads() {
// 队列名称
String queueName = "simple.queue";
// 消息
String message = "hello SimpleQueue!";
for(int i=0;i<20;i++){
rabbitTemplate.convertAndSend(queueName, message+i);
}
// 发送消息
}
}
建立一个监听器
//自动创建队列
@RabbitListener(queuesToDeclare = @Queue("simple.queue"))
public void process2(String msg){
System.out.println("消费者接收到消息:【" + msg + "】");
}