RabbitMQ 整合Springboot 业务模型测试
1.新建springboot项目 rabbitmq_springboot
添加pom依赖
1 <!--引入rabbitmq集成的依赖--> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-starter-amqp</artifactId> 5 </dependency> 6 <dependency> 7 <groupId>org.springframework.boot</groupId> 8 <artifactId>spring-boot-starter-web</artifactId> 9 <version>2.3.5.RELEASE</version> 10 </dependency>
配置application.yml文件
1 spring: 2 application: 3 name: rabbitmq-springboot 4 rabbitmq: 5 host: 192.168.26.1 #IP地址 6 port: 5672 #rabbitmq 端口号 7 username: ems #rabbitmq 用户名 8 password: 123 #rabbitmq 密码 9 virtual-host: /ems
2.springboot项目tes包下编写生产者测试代码
1 package com.puyu.test; 2 3 import com.puyu.RabbitmqSpringbootApplication; 4 import org.junit.Test; 5 import org.junit.runner.RunWith; 6 import org.springframework.amqp.rabbit.core.RabbitTemplate; 7 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.boot.test.context.SpringBootTest; 9 import org.springframework.test.context.junit4.SpringRunner; 10 11 @SpringBootTest(classes = RabbitmqSpringbootApplication.class) 12 @RunWith(SpringRunner.class) 13 public class TestRabbitMQ { 14 @Autowired 15 private RabbitTemplate rabbitTemplate; 16 17 18 //topic 动态路由 订阅模式 19 @Test 20 public void testTopic(){ 21 // rabbitTemplate.convertAndSend("topics1","user.save","user.save 路由消息"); 22 // rabbitTemplate.convertAndSend("topics1","order","order 路由消息"); 23 rabbitTemplate.convertAndSend("topics1","product.save.add","product.save.add 路由消息"); 24 } 25 26 //route 路由模式 27 @Test 28 public void testRoute(){ 29 rabbitTemplate.convertAndSend("directs","error","发送error的key的路由信息"); 30 } 31 32 //Fanout 广播 模型 发布订阅模式 生产者交给交换机再由交换机广播给多个队列,至消费者 33 @Test 34 public void testFanout(){ 35 rabbitTemplate.convertAndSend("logs1","","Fanout的模型发送的消息"); 36 } 37 38 //work 模型 39 @Test 40 public void testWork(){ 41 for (int i = 0; i < 10 ; i++) { 42 rabbitTemplate.convertAndSend("work1","work模型"+i); 43 } 44 45 } 46 //hello word 模型 47 @Test 48 public void testHello(){ 49 rabbitTemplate.convertAndSend("hello1","hello word"); 50 } 51 }
3.hello word 最基本直连模式
package com.puyu.hello;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
//指定消息队列名称,如果没有则queue新建一个
//@RabbitListener(queuesToDeclare = @Queue(value = "hello1",durable = "true",autoDelete = "true"))
//参数1 :队列名称。参数2 :是否持久化。参数3:是否自动删除
@RabbitListener(queuesToDeclare = @Queue(value = "hello1"))
public class HelloCustomer {
//@RabbitHandler指定方法,此方法是取出消息的回调方法
@RabbitHandler
public void receivel(String message){
System.out.println("message"+message);
}
}
4.work 模型 并行模式
1 package com.puyu.work; 2 3 import org.springframework.amqp.rabbit.annotation.Queue; 4 import org.springframework.amqp.rabbit.annotation.RabbitListener; 5 import org.springframework.stereotype.Component; 6 7 @Component 8 public class WorkCustomer { 9 10 //代表这个方法会处理当前rabbitlistenner所监听队列的回调 11 @RabbitListener(queuesToDeclare = @Queue("work1")) 12 public void receive1(String message){ 13 System.out.println("message1="+message); 14 } 15 //代表这个方法会处理当前rabbitlistenner所监听队列的回调 16 @RabbitListener(queuesToDeclare = @Queue("work1")) 17 public void receive2(String message){ 18 System.out.println("message2="+message); 19 } 20 21 }
5.Fanout 广播 模型
发布订阅模式 生产者交给交换机再由交换机广播给多个队列,至消费者
1 package com.puyu.fanout; 2 3 import org.springframework.amqp.rabbit.annotation.Exchange; 4 import org.springframework.amqp.rabbit.annotation.Queue; 5 import org.springframework.amqp.rabbit.annotation.QueueBinding; 6 import org.springframework.amqp.rabbit.annotation.RabbitListener; 7 import org.springframework.stereotype.Component; 8 9 @Component 10 public class FanoutCustomer { 11 12 @RabbitListener(bindings = { 13 @QueueBinding( 14 value = @Queue,//创建临时队列 15 exchange = @Exchange(value = "logs1",type = "fanout")//绑定交换机 16 ) 17 }) 18 public void receive1(String message){ 19 System.out.println("message1---"+message); 20 } 21 @RabbitListener(bindings = { 22 @QueueBinding( 23 value = @Queue,//创建临时队列 24 exchange = @Exchange(value = "logs1",type = "fanout")//绑定交换机 25 ) 26 }) 27 public void receive2(String message){ 28 System.out.println("message2---"+message); 29 } 30 }
6. route 路由模式
1 package com.puyu.route; 2 3 import org.springframework.amqp.rabbit.annotation.Exchange; 4 import org.springframework.amqp.rabbit.annotation.Queue; 5 import org.springframework.amqp.rabbit.annotation.QueueBinding; 6 import org.springframework.amqp.rabbit.annotation.RabbitListener; 7 import org.springframework.stereotype.Component; 8 9 @Component 10 public class RouteCustomer { 11 12 @RabbitListener(bindings = { 13 @QueueBinding( 14 value =@Queue, //创建临时队列 15 exchange = @Exchange(value = "directs",type = "direct"),//指定交换机名称,和类型 16 key = {"info","error","warn"} 17 ) 18 } 19 20 ) 21 public void receive1(String message){ 22 System.out.println("message1---"+message); 23 } 24 25 @RabbitListener(bindings = { 26 @QueueBinding( 27 value =@Queue, //创建临时队列 28 exchange = @Exchange(value = "directs",type = "direct"),//指定交换机名称,和类型 29 key = {"error"} 30 ) 31 } 32 33 ) 34 public void receive2(String message){ 35 System.out.println("message2---"+message); 36 } 37 }
7.topic 动态路由 订阅模式
1 package com.puyu.topic; 2 3 import org.springframework.amqp.rabbit.annotation.Exchange; 4 import org.springframework.amqp.rabbit.annotation.Queue; 5 import org.springframework.amqp.rabbit.annotation.QueueBinding; 6 import org.springframework.amqp.rabbit.annotation.RabbitListener; 7 import org.springframework.stereotype.Component; 8 9 @Component 10 public class TopicCustomer { 11 12 @RabbitListener(bindings = { 13 @QueueBinding( 14 value = @Queue,//创建临时队列 15 exchange = @Exchange(name = "topics1", type = "topic"),//帮顶交换机名称 和交换机类型 16 key = {"user.*","user.save"} 17 ) 18 }) 19 public void receive1(String message) { 20 System.out.println("message1---"+message); 21 } 22 @RabbitListener(bindings = { 23 @QueueBinding( 24 value = @Queue,//创建临时队列 25 exchange = @Exchange(name = "topics1", type = "topic"),//帮顶交换机名称 和交换机类型 26 key = {"order.#","product.#","user.*"}//*任何单个 #任何多个 27 ) 28 }) 29 public void receive2(String message ) { 30 System.out.println("message2---"+message); 31 } 32 }
8.spring boot 启动类
1 package com.puyu; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 6 @SpringBootApplication 7 public class RabbitmqSpringbootApplication { 8 9 public static void main(String[] args) { 10 SpringApplication.run(RabbitmqSpringbootApplication.class, args); 11 } 12 13 }