SpringBoot RabbitMQ 异步激活_注册邮箱


注:【网页版】右上方的悬浮框( 有目录索引 )


一、前景摘要

1-1】QQ 邮箱设置

QQ 邮箱-设置-账户-服务

1-2】Linux 开启 MyRabbitMQ 服务

Linux 系统安装及 Linux 环境配置( 简要版 )

二、代码

2-1】yml 配置信息

spring:
  datasource:
    url: jdbc:mysq:///shiro?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    password: root
    username: root
    hikari:
      maximum-pool-size: 200
      minimum-idle: 10
  jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss
    default-property-inclusion: non_null
  mail:
    host: smtp.qq.com
    username: # 输入你要发消息的邮箱 例:24****[email protected]
    password: # 输入你授权码
    default-encoding: utf-8
  rabbitmq:
    host: 192.168.0.111
    port: 5672
    username: admin
    password: admin

server:
  port: 8080

mybatis:
  mapper-locations: classpath:mapper/*.xml
  configuration:
    call-setters-on-nulls: true
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2-2】controller 层

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

    @Resource
    private UserService userService;

    @PostMapping(value = "/add")
    public Map addOneInfo(
            @RequestParam Map map){
        return userService.addOneInfo(map);
    }

    @GetMapping(value = "/active/{uid}")
    public Map activeOneUser(
            @PathVariable(value = "uid") BigInteger uid){
        return userService.activeOneUser(uid);
    }

}

2-3】简单业务层

@Service
@Transactional
public class UserServiceImpl implements UserService {

    @Resource
    private UserMapper mapper;

    @Resource
    private RabbitTemplate rabbitTemplate;

    private HashMap<Object, Object> returnMap = new HashMap<>();

    @Override
    public Map addOneInfo(Map map) {
        System.out.println(map);
        if(mapper.addOneInfo(map)==1){
        	// 新用户信息添加至数据库成功,则返回成功信息
        	// 给路由交换机,发送一条信息.
            returnMap.put("code",100);
            returnMap.put("info","添加成功");
            rabbitTemplate.convertAndSend("directExchange","aa",map);
        } else {
            returnMap.put("code",200);
            returnMap.put("info","添加失败");
        }
        return returnMap;
    }

    @Override
    public Map activeOneUser(BigInteger uid) {
        if(mapper.updateOneInfoById(uid)==1){
            returnMap.put("code",100);
            returnMap.put("info","邮箱成功激活");
        } else {
            returnMap.put("code",200);
            returnMap.put("info","邮箱激活失败");
        }
        return returnMap;
    }
}

2-4】配置消息队列 和 交换机

@Configuration
public class MsgConfig {

    @Bean
    public Queue directQueue(){
        return new Queue("directQueue");
    }

    @Bean
    public DirectExchange directExchange(){
        return new DirectExchange("directExchange");
    }

    // 通过 路由键,将消息队列绑定到 路由 上
    @Bean
    public Binding binding3(Queue directQueue, DirectExchange directExchange){
        return BindingBuilder.bind(directQueue).to(directExchange).with("aa");
    }
}

2-5】配置监听

    @Value("${spring.mail.username}")
    private String from;

    @Resource
    private JavaMailSender mailSender;

    @RabbitListener(queues="directQueue")
    public void getMsg5(Map map){
		// 负责监听消息队列信息,监听到信息,则发送一链接至对方邮箱,点击链接可以激活邮箱

        System.out.println("监听到消息:"+map);
        // 新添加用户 id
        BigInteger uid = (BigInteger) map.get("uid");

        MimeMessage message = mailSender.createMimeMessage();
       	MimeMessageHelper helper;
        try {
            helper = new MimeMessageHelper(message,true);
            helper.setFrom(from);
            helper.setTo((String) map.get("email"));
            helper.setSubject("激活邮箱");
            helper.setText("<a href='http://localhost:8080/user/active/"+uid+"'>激活邮箱</a>",true);
            mailSender.send(message);
        } catch (MessagingException e) {
            System.err.println("邮件发送失败");
            e.printStackTrace();
        }
    }

猜你喜欢

转载自blog.csdn.net/ice_debj/article/details/106169491