SpringBoot整合RabbitMQ
一、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
二、配置文件中加入配置
spring:
application:
name: rabbitmq-springboot
rabbitmq:
host: 127.0.0.1
port: 5672
username: root
password: root
virtual-host: /test #相当于mysql数据库中对库的访问
三、基本使用
最新官方定义消息生产消费有7种模式,分别为:
1、Hello World!
2、Work queues-------------> 工作队列
3、Publish/Subscribe-------> 发布订阅
4、Routing-----------------> 路由
5、Topics------------------> 动态路由
6、RPC
7、Publisher Confirms
这里,只介绍前五种的基本使用
//引入相关依赖后,spring会自动扫描到RabbitTemplate对象,使用时,直接引入即可
@Autowired
private RabbitTemplate rabbitTemplate;
1、Hello World!
//生产消息
@Test
public void testHelloWorld(){
rabbitTemplate.convertAndSend("hello","hello world");
}
//消费消息
@Component
public class HelloCustomer {
@RabbitHandler
@RabbitListener(queuesToDeclare = @Queue(value = "hello"/*,durable ="false",autoDelete = "true"*/))
public void receive(String message){
System.out.println(message);
}
}
2、Work queues
//生产消息
@Test
public void testWork(){
for (int i = 1; i < 10; i++){
rabbitTemplate.convertAndSend("work","work模型");
}
}
//消费消息
@RabbitListener(queuesToDeclare = @Queue("work"))
public void receiveWork1(String message){
System.out.println("work1 message:"+message);
}
@RabbitListener(queuesToDeclare = @Queue("work"))
public void receiveWork2(String message){
System.out.println("work2 message:"+message);
}
3、Publish/Subscribe
//生产消息
//广播
@Test
public void testFanout(){
//exchange:绑定的交换机
rabbitTemplate.convertAndSend("logs",null,"fanout模型发送的消息");
}
//消费消息
// fanout 发布订阅
@RabbitListener(bindings = {
@QueueBinding(
value = @Queue,//创建临时队列
exchange = @Exchange(value = "logs",type = "fanout")//绑定的交换机
)
})
public void receive1(String message){
System.out.println("fanout message1:"+message);
}
@RabbitListener(bindings = {
@QueueBinding(
value = @Queue,//创建临时队列
exchange = @Exchange(value = "logs",type = "fanout")//绑定的交换机
)
})
public void receive2(String message){
System.out.println("fanout message2:"+message);
}
4、Routing
//生产消息
//路由 route
@Test
public void testRoute(){
rabbitTemplate.convertAndSend("directs","error","发送路由模式的消息");
}
//消费消息
//路由模式 route
@RabbitListener(bindings = {
@QueueBinding(
value = @Queue,//创建临时队列
exchange = @Exchange(value = "directs",type = "direct"),//自定交换机名称和类型
key = {"info","error","warn"}
)
})
public void receiveRoute1(String message){
System.out.println("route1 message:"+message);
}
@RabbitListener(bindings = {
@QueueBinding(
value = @Queue,//创建临时队列
exchange = @Exchange(value = "directs",type = "direct"),//自定交换机名称和类型
key = {"error"}
)
})
public void receiveRoute2(String message){
System.out.println("route2 message:"+message);
}
5、Topics
//生产消息
//动态路由 topic
@Test
public void testTopic(){
rabbitTemplate.convertAndSend("topics","product.save.add","product.save.add 路由消息");
}
//消费消息
//动态路由消费消息 topic
@RabbitListener(bindings = {
@QueueBinding(
value = @Queue,
exchange = @Exchange(type = "topic",name = "topics"),
key = {"user.save","user.*"}
)
})
public void receiveTopic1(String message){
System.out.println("topic1 message:"+message);
}
@RabbitListener(bindings = {
@QueueBinding(
value = @Queue,
exchange = @Exchange(type = "topic",name = "topics"),
key = {"order.#","product.#","user.*"}
)
})
public void receiveTopic2(String message){
System.out.println("topic2 message:"+message);
}