栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

基于SpringBoot + RabbitMQ实现注册异步发送邮箱

基于SpringBoot + RabbitMQ实现注册异步发送邮箱

gitee:a7. (JiaBin1) - Gitee.com 一、实现流程

首先我们先了解一下传统方式的注册方式,从图中可以看到我们的代码是逐步执行的,上一步未完成下一步无法进行的,该流程非常的耗时,当前注册模块只有一个验证码功能,若以后增加更多模块以后服务会越来越耗时间

当我们加入RabbitMQ中间件后,我们可以将其它的功能放入中间件中,注册功能只进行单独的注册即可,这样做可以为我们的模块大大减少了消耗时间

一般的注册流程耗时6s+,加入RabbitMQ后的注册流程耗时1s+。

二、代码实践

【数据库脚本】

create database rabbitmqdb;
use rabbitmqdb;

create table `user`(
	uid int primary key auto_increment,
	uemail varchar(50),
	uname varchar(50),
	upwd varchar(50),
	rname varchar(20)
);

1、搭建SpringBoot项目,导入以下依赖内容

 
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.2.2
        
        
            mysql
            mysql-connector-java
            5.1.48
        
        
            org.projectlombok
            lombok
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-mail
        
        
            org.springframework
            spring-context-support
        
        
            org.springframework.boot
            spring-boot-starter-amqp
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.springframework.amqp
            spring-rabbit-test
            test
        
    

2、搭建项目基础架构

【配置文件】

server.port=8210

#邮箱发送配置
spring.mail.host=smtp.qq.com
spring.mail.username=1650457693@qq.com
spring.mail.password=这里填写你的邮箱授权码
spring.mail.default-encoding=UTF-8
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

#RabbitMQ配置
spring.rabbitmq.host=192.168.171.134
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123
spring.rabbitmq.virtual-host=/

#mysql配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/rabbitmqdb
spring.datasource.username=root
spring.datasource.password=ok

#mybatis配置
mybatis.type-aliases-package=com.jiabin.pojo
mybatis.mapper-locations=classpath:mapper
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class User implements Serializable {
    private Integer uid;
    private String uemail;
    private String uname;
    private String upwd;
    private String rname;
}

【mapper接口】

@Mapper
public interface UserMapper {
    
    
    Integer addUser(User user);
}

【mapper映射】





    
    
        insert `user` value('0',#{uemail},#{uname},#{upwd},#{rname});
    

【service】

public interface UserService {

    
    Integer register(User user);
}

【serviceImpl】

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public Integer register(User user) {
        return userMapper.addUser(user);
    }

}

3、创建发送验证码业务类

​

@Service
public class MailService {

    private static final String SENDER = "1650457693@qq.com";
    @Autowired
    private JavaMailSender mailSender;

    
    public void sendSimpleMail(String to, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(SENDER);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(content);
        try {
            mailSender.send(message);
        } catch (Exception e) {
            System.out.println("发送普通邮件时发生异常!" + e);
        }
    }

    
    public void sendFileMail(String to, String subject, String content, List fileList) {
        MimeMessage message = mailSender.createMimeMessage();
        try {
            //true表示需要创建一个multipart message
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(SENDER);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);

            if (fileList != null && fileList.size() > 0) {
                for (File file : fileList) {
                    FileSystemResource fileSystemResource = new FileSystemResource(file);
                    String fileName = fileSystemResource.getFilename();
                    helper.addAttachment(fileName, fileSystemResource);
                }
            }
            mailSender.send(message);
        } catch (MessagingException e) {
            System.out.println("发送带附件的邮件时发生异常!" + e);
        }
    }

    
    public void sendHtmlMail(String to, String subject, String content, Map srcIdMap) {
        MimeMessage message = mailSender.createMimeMessage();
        try {
            //true表示需要创建一个multipart message
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(SENDER);
            helper.setTo(to);
            helper.setSubject(subject);
            //true指的是html邮件
            helper.setText(content, true);
            if (srcIdMap != null) {
                for (Map.Entry entry : srcIdMap.entrySet()) {
                    FileSystemResource file = new FileSystemResource(new File(entry.getValue()));
                    helper.addInline(entry.getKey(), file);
                }
            }
            mailSender.send(message);
        } catch (MessagingException e) {
            System.out.println("发送HTML静态文件的邮件时发生异常!" + e);
        }
    }

}

​

4、创建Controller,实现我们具体的业务,发送验证码工作交给中间件

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private RabbitTemplate rabbitTemplate;


    
    @PostMapping("/register")
    public String register(@RequestBody User user){
        // 数据库入库
        userService.register(user);
        // 发送验证码
        rabbitTemplate.convertAndSend("mailExchange","user.mail",user.getUemail());
        // 以后更多的业务放入中间件即可...
        // 返回结果
        return "用户注册成功!";
    }
}

5、创建队列消费者进行短信发送

@Component
public class RabbitMQReciveA {

    @Autowired
    private MailService mailService;

    @RabbitListener(bindings =
        @QueueBinding(
                value = @Queue, //临时队列
                exchange = @Exchange(name = "mailExchange",type = "topic"), //指定交换机名称与类型
                key = {"user.*"}
        )
    )
    private void sendEMail(String uemail){
        String subject = "用户信息注册成功!";
        String content = "恭喜你注册成功!";
        mailService.sendSimpleMail(uemail, subject, content);
        //发送邮件
        System.out.println("已发送邮件");
    }

}

6、至此,编写完毕,我们启动项目通过postman测试即可!

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

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

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