搭建项目
创建项目maven项目jkw-rabbitmq
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>jkw-rabbitmq</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- rabbitmq -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--springMVC-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
application.yml
#RabbitMQ
spring:
rabbitmq:
host: 192.168.66.101
port: 5672
username: guest
password: guest
virtual-host: /
#日志格式
logging:
pattern:
console: '%d{HH:mm:ss.SSS} %clr(%-5level) --- [%-15thread] %cyan(%-50logger{50}):%msg%n'
启动类
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class,args);
}
}
配置队列和交换机
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 配置类【配置交换机和队列】
*/
@Configuration
public class RabbitConfig {
private final String EXCHANGE_NAME="springboot_topic";//交换机名称
private final String QUEUE_NAME="springboot_queue";//队列名称
//创建topic交换机
@Bean("springbootTopic")
public Exchange getExchange(){
return ExchangeBuilder
.topicExchange(EXCHANGE_NAME)
.durable(true)//是否持久化,true-关闭后交换机仍存在
.build();
}
//创建队列
@Bean("springbootQueue")
public Queue getQueue(){
return new Queue(QUEUE_NAME);
}
//交换机绑定队列
@Bean
public Binding bindQueue(@Qualifier("springbootTopic") Exchange exchange, @Qualifier("springbootQueue")Queue queue){
return BindingBuilder
.bind(queue)
.to(exchange)
.with("#.msg.#")//路由键
.noargs();//没有其余参数
}
}
测试使用
生产者
/**
* 生产者
*/
@RestController
public class Producer {
//SpringBoot整合RabbitMQ时提供了工具类RabbitTemplate
@Autowired
private RabbitTemplate rabbitTemplate;
@GetMapping("/send")
public String sendMsg(){
rabbitTemplate.convertAndSend("springboot_topic","msg","发送消息");//交换机名/路由键/消息
return "发送消息";
}
}
消费者
/**
* 消费者
*/
@Component
public class Consumer {
@RabbitListener(queues = "springboot_queue")//监听的队列名
public void listen(String msg){//框架自动帮我们转字节数组
System.out.println(msg);
}
}
测试
访问
http://localhost:8080/send
测试结果