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 }

 

posted @ 2020-11-14 01:06  RunawayProgrammer  阅读(200)  评论(0编辑  收藏  举报