转载

SpringBoot集成RabbitMQ实现用户注册

上一篇已经介绍了什么是rabbitmq以及和springboot集成方法,也介绍了springboot集成邮件的方式,不了解的可以先看以前写的文章。

三者集成

上一篇springboot集成邮件注册的已经介绍了,本篇文章基于这个介绍,我们只需要修改下面几处即可完成3者集成。

实现步骤

  1. 添加rabbitmq依赖

    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    复制代码
  2. 添加rabbitmq配置

    spring:
     rabbitmq:
       addresses: 127.0.0.1
       username: guest
       password: guest
       port: 5672
    复制代码
  3. 修改controller类

    package com.lytw13.demo.controller;
    
    import com.lytw13.demo.model.TbUser;
    import com.lytw13.demo.service.UserService;
    import com.lytw13.demo.util.MailUtil;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("user")
    public class UserController {
       @Autowired
       UserService userService;
       @Autowired
       RabbitTemplate rabbitTemplate;
    
       @PostMapping("save")
       public void save(@RequestBody TbUser user) {
           userService.save(user);
           rabbitTemplate.convertAndSend("email.direct","email.direct",user);
       }
    
    }
    复制代码
  4. 修改service实现类

    public void save(TbUser user) {
           long startTime = System.currentTimeMillis();
           userMapper.insert(user);
           long endTime = System.currentTimeMillis();
           System.out.println("耗时:"+(endTime-startTime));
       }
    
       @RabbitListener(queues = "email.direct")
       public void sendEmail(TbUser user) {
           List<String> fileList = new ArrayList<>();
           fileList.add("E://others//MyBlog//新建文本文档1.txt");
           fileList.add("E://others//MyBlog//新建文本文档.txt");
           MailUtil.sendHtmlTemplateMail(user.getEmail(),user.getName(),fileList);
       }
    复制代码

    现在就完成了,当用户发送注册信息的时候,会推送给rabbitmq,然后我们只需要定义个方法添加上@RabbitListener(queues = "email.direct")注解进行实时监听, 注意主启动类上需要添加@EnableRabbit开启rabbit ,当监听到用户注册的时候,不需要一直等待发送邮件成功,就可以先将页面返回给用户,而不是一直等待,页面一直加载不了(浏览器一直转圈),使用户体验变差,这就是用rabbitmq实现异步操作的最简单用法。

    测试

    这里就直接截个图,可以对比下上一篇同步串行用户注册发送邮件耗时。

    SpringBoot集成RabbitMQ实现用户注册
    email_ceshi2
SpringBoot集成RabbitMQ实现用户注册
email_ceshi2jieguo

具体代码我已经上传到了github,如果有问题可以参考下。 前往

原文  https://juejin.im/post/5e06e9666fb9a0160a3146c7
正文到此结束
Loading...