一、创建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
跟生产者一样
本文来自博客园,作者:荣慕平,转载请注明原文链接:https://www.cnblogs.com/rongmuping/articles/16244083.html
                    
                
                
            
        
浙公网安备 33010602011771号