一、创建maven项目并引入依赖

 

 · pom.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <modelVersion>4.0.0</modelVersion>
 6 
 7     <groupId>org.sdkj</groupId>
 8     <artifactId>springboot-rabbitmq</artifactId>
 9     <packaging>pom</packaging>
10     <version>1.0-SNAPSHOT</version>
11     <modules>
12         <module>producer</module>
13         <module>consumer-email</module>
14         <module>consumer-sms</module>
15     </modules>
16 
17     <parent>
18         <groupId>org.springframework.boot</groupId>
19         <artifactId>spring-boot-starter-parent</artifactId>
20         <version>2.3.5.RELEASE</version>
21     </parent>
22 
23     <properties>
24         <maven.compiler.source>8</maven.compiler.source>
25         <maven.compiler.target>8</maven.compiler.target>
26     </properties>
27 
28     <dependencies>
29 
30         <!-- springboot-web组件 -->
31         <dependency>
32             <groupId>org.springframework.boot</groupId>
33             <artifactId>spring-boot-starter-web</artifactId>
34         </dependency>
35         <!-- 添加springboot对amqp的支持 -->
36         <dependency>
37             <groupId>org.springframework.boot</groupId>
38             <artifactId>spring-boot-starter-amqp</artifactId>
39         </dependency>
40         <dependency>
41             <groupId>org.apache.commons</groupId>
42             <artifactId>commons-lang3</artifactId>
43             <version>3.11</version>
44         </dependency>
45         <!--fastjson -->
46         <dependency>
47             <groupId>com.alibaba</groupId>
48             <artifactId>fastjson</artifactId>
49             <version>1.2.49</version>
50         </dependency>
51 
52         <dependency>
53             <groupId>org.projectlombok</groupId>
54             <artifactId>lombok</artifactId>
55             <version>1.18.16</version>
56             <scope>provided</scope>
57         </dependency>
58     </dependencies>
59 
60 </project>

二、生产者搭建

1.RabbitMQConfig

 1 package com.sdkj.config;
 2 
 3 import org.springframework.amqp.core.Binding;
 4 import org.springframework.amqp.core.BindingBuilder;
 5 import org.springframework.amqp.core.FanoutExchange;
 6 import org.springframework.amqp.core.Queue;
 7 import org.springframework.context.annotation.Bean;
 8 import org.springframework.stereotype.Component;
 9 
10 /**
11  * @Author wangshuo
12  * @Date 2022/5/7, 18:58
13  * Please add a comment
14  */
15 @Component
16 public class RabbitMQConfig {
17 
18     /**
19      * 定义交换机
20      */
21     private String EXCHANGE_SPRINGBOOT_NAME = "/fanout_exchange";
22     /**
23      * 短信队列
24      */
25     private String FANOUT_SMS_QUEUE = "fanout_sms_queue";
26     /**
27      * 邮件队列
28      */
29     private String FANOUT_EMAIL_QUEUE = "fanout_email_queue";
30     /**
31      * 配置smsQueue
32      *
33      * @return
34      */
35     @Bean
36     public Queue smsQueue() {
37         return new Queue(FANOUT_SMS_QUEUE);
38     }
39 
40     /**
41      * 配置emailQueue
42      *
43      * @return
44      */
45     @Bean
46     public Queue emailQueue() {
47         return new Queue(FANOUT_EMAIL_QUEUE);
48     }
49 
50     /**
51      * 配置fanoutExchange
52      *
53      * @return
54      */
55     @Bean
56     public FanoutExchange fanoutExchange() {
57         return new FanoutExchange(EXCHANGE_SPRINGBOOT_NAME);
58     }
59 
60     // 绑定交换机 sms
61     @Bean
62     public Binding bindingSmsFanoutExchange(Queue smsQueue, FanoutExchange fanoutExchange) {
63         return BindingBuilder.bind(smsQueue).to(fanoutExchange);
64     }
65 
66     // 绑定交换机 email
67     @Bean
68     public Binding bindingEmailFanoutExchange(Queue emailQueue, FanoutExchange fanoutExchange) {
69         return BindingBuilder.bind(emailQueue).to(fanoutExchange);
70     }
71 }

2.Producer

 1 package com.sdkj;
 2 
 3 import com.alibaba.fastjson.JSONObject;
 4 import com.sdkj.pojo.UserEntity;
 5 import org.springframework.amqp.core.AmqpTemplate;
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.web.bind.annotation.RequestMapping;
 8 import org.springframework.web.bind.annotation.ResponseBody;
 9 import org.springframework.web.bind.annotation.RestController;
10 
11 import java.util.Date;
12 
13 /**
14  * @Author wangshuo
15  * @Date 2022/5/7, 18:49
16  * Please add a comment
17  */
18 @RestController
19 public class Producer {
20 
21     @Autowired
22     AmqpTemplate amqpTemplate;
23 
24     @RequestMapping(value = "/send")
25     public String sengMsg() {
26 
27         /*
28             参数
29                 交换机名称
30                 路由key
31                 消息
32          */
33         amqpTemplate.convertAndSend("/fanout_exchange", "", "muping97@gmail.com");
34         return "success";
35     }
36 
37     @RequestMapping(value = "sendJson")
38     public String sendJsonMsg() {
39 
40         UserEntity userEntity = new UserEntity(1, "wangshuo", 1, 18, new Date());
41         String s = JSONObject.toJSONString(userEntity);
42         amqpTemplate.convertAndSend("/fanout_exchange", "", s);
43         return "success";
44     }
45 }

 

3.application.yml

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
    virtual-host: /MuPing

· amqpTemplate(spring-boot-starter-amqp / 2.3.5版本)里边没找到发布成功的回调方法,可以在消费者消费成功后发送成功tag给生产者

三、邮件消费者 / 短信消费者

1.SmsConsumer

 1 package com.sdkj;
 2 
 3 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 4 import org.springframework.amqp.rabbit.annotation.RabbitListener;
 5 import org.springframework.stereotype.Component;
 6 
 7 /**
 8  * @Author wangshuo
 9  * @Date 2022/5/7, 19:19
10  * Please add a comment
11  */
12 @Component
13 public class SmsConsumer {
14 
15     @RabbitListener(queues = "fanout_sms_queue")
16     @RabbitHandler
17     public void process(String msg){
18         System.out.println(msg);
19     }
20 }

2.EmailConsumer

 1 package com.sdkj;
 2 
 3 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 4 import org.springframework.amqp.rabbit.annotation.RabbitListener;
 5 import org.springframework.stereotype.Component;
 6 
 7 /**
 8  * @Author wangshuo
 9  * @Date 2022/5/7, 19:19
10  * Please add a comment
11  */
12 @Component
13 public class EmailConsumer {
14 
15 
16     @RabbitListener(queues = "fanout_email_queue")
17     @RabbitHandler
18     public void process(String msg){
19         System.out.println(msg);
20     }
21 }

3.application.yml

跟生产者一样