栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Boot 消息服务的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot 消息服务的使用

SpringBoot 框架整合RabbitMQ 实现消息服务

实验场景:当用户注册成功后,可以选择向用户发送注册邮件或者注册短信通知。

1.在系统中安装 RabbitMQ 消息服务

(1)先安装 Erlang 语言包并配置环境变量

(2)安装 RabbitMQ 安装包

(3)在 RabbitMQ 安装目录 sbin 文件夹下,打开 cmd 窗口,安装 RabbitMQ

可视化管理插件

(4)在浏览器上访问 http://localhost:15672(用户名和密码均为 guest)

2.新建一个 Spring Boot 框架项目作为消息生产者,

项目名为“rabbitmq_producer”,框架中需要集成 Web 开发。

(1)添加 RabbitMQ 依赖(spring-boot-starter-amqp)和 Thymeleaf 依赖


     org.springframework.boot
     spring-boot-starter-amqp
     2.7.0
 

(2)在 application.properties 配置文件中添加 RabbitMQ 消息服务连接

相关配置

 # 配置RabbitMQ消息中间件连接配置
 spring.rabbitmq.host=localhost
 spring.rabbitmq.port=5672
 spring.rabbitmq.username=guest
 spring.rabbitmq.password=guest
 #配置RabbitMQ虚拟主机路径/,默认可以省略
 spring.rabbitmq.virtual-host=/

(3)创建消息代理配置类,完成交换器(Exchange)、队列(sms_queue、

email_queue)、绑定(Bingding)以及消息转换器(Jackson2JsonMessageConverter)

的配置。

 @Configuration
 public class RabbitMQConfig {
 ​
     //定义常量
     public static final String TOPIC_EXCHANGE="topic_exchange";
     public static final String SMS_QUEUE_NAME="sms_queue";
     public static final String EMAIL_QUEUE_NAME="email_queue";
 ​
     //1.交换机
     @Bean("exchange")
     public Exchange exchange(){
         return ExchangeBuilder.topicExchange(TOPIC_EXCHANGE).durable(true).build();
     }
 ​
 ​
     //定义短信消息队列
     @Bean("sms_queue")
     public Queue sms_queue(){
         return QueueBuilder.durable(SMS_QUEUE_NAME).build();
     }
     //定义邮件消息队列
     @Bean("email_queue")
     public Queue email_queue(){
         return QueueBuilder.durable(EMAIL_QUEUE_NAME).build();
     }
 ​
     //将消息队列与交换机进行绑定
     @Bean("bindingSmsFanout")
     public Binding bindingSmsFanout(){
         return BindingBuilder.bind(sms_queue()).to(exchange()).with("").noargs();
     }
     @Bean("bindingEmailFanout")
     public Binding bindingEmailFanout(){
         return BindingBuilder.bind(email_queue()).to(exchange()).with("").noargs();
     }
 ​
     //消息转换器(Jackson2JsonMessageConverter)
     @Bean
     public MessageConverter messageConverter(){
         return new Jackson2JsonMessageConverter();
     }
 ​
 ​
 }

(4)自行设计注册页面,用户可以输入用户名、密码、手机号和邮箱,并可以选择发短信或者发邮件。当用户单击“注册”按钮,可以将用户填写的信息发送到 RabbitMQ 消息队列中。

controller层

@Controller
public class UserController {

    @Autowired
    private UserServer userServer;

    @RequestMapping("/registerPage")
    public String RegisterPage(){
        return "/views/register";
    }


    @RequestMapping("/register")
    @ResponseBody
    public String Register(User user){
        Boolean flag=userServer.setRabbitTemplate(user);
        if (flag) {
            return "注册成功";
        }else return "注册失败";
    }

}

逻辑层

@Service
public class UserServer {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    public Boolean setRabbitTemplate(User user){
        try {
            for (int i=0;i 


 

3.新建一个 Spring Boot 框架项目作为消息消费者

项目名为“rabbitmq_consumer”,框架中需要集成 Web 开发。

(1)添加 RabbitMQ 依赖(spring-boot-starter-amqp)

 
     org.springframework.boot
     spring-boot-starter-amqp
     2.7.0
 

(2)在 application.properties 配置文件中添加 RabbitMQ 消息服务连接相关配置

 # 应用服务 WEB 访问端口
 server.port=8081
 ​
 # 配置RabbitMQ消息中间件连接配置
 spring.rabbitmq.host=localhost
 spring.rabbitmq.port=5672
 spring.rabbitmq.username=guest
 spring.rabbitmq.password=guest
 #配置RabbitMQ虚拟主机路径/,默认可以省略
 spring.rabbitmq.virtual-host=/

(3)创建消息代理配置类,完成消息转换器(Jackson2JsonMessageConverter)的配置。

 @Configuration
 public class RabbitConfig {
     @Bean
     public MessageConverter messageConverter(){
         return new Jackson2JsonMessageConverter();
     }
 }

(4)创建一个消息接收和处理的类 RabbitMQListener,添加两个方法分别监听队列(sms_queue、email_queue)

监听 sms_queue 队列的消费者在控制台打印出“向【手机号】成功发送短信,内容:恭喜您,【账户名】,注册成功。”

监听 email_queue 队列的消费者在控制台打印出“向【邮箱】成功发送邮3件,内容:恭喜您,【账户名】,注册成功。”

 
@Component
 public class RabbitMQListener {
 ​
     //邮箱
     @RabbitListener( queues = "email_queue")
     public void emailQueue(User user){
         System.out.println("向"+user.getEmil()+"成功发送邮箱,内容:恭喜您,"+user.getUsername()+",注册成功。");
     }
 ​
     //电话
     @RabbitListener(queues = "sms_queue")
     public void smsQueue(User user){
         System.out.println("向"+user.getPhone()+"成功发送短信,内容:恭喜您,"+user.getUsername()+",注册成功。");
     }
 }
4.注意点
  • 第一次先启动消费者,后启动生产者。因为刚开始在mq中没有缓存的内容,在第二次等rabbitmq里面缓存了queue和exchange等消息就可以先启动生产者

  • 一定要将将消息队列与交换机进行绑定

  • 消费者的queue一定要和生产者的一致

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/981502.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号