SpringBoot项目整合Redis,Rabbitmq发送、消费、存储邮件

📑前言

本文主要是【Rabbitmq】------SpringBoot项目整合Redis,Rabbitmq发送、消费、存储邮件的文章,如果有什么需要改进的地方还请大佬指出⛺️

🎬作者简介:大家好,我是听风与他🥇

☁️博客首页:CSDN主页听风与他

🌄每日一句:狠狠沉淀,顶峰相见

目录

SpringBoot项目整合Redis,Rabbitmq发送、消费、存储邮件

1.导入mail,redis,rabbitmq的依赖

xml 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

2.配置application.yml文件

yaml 复制代码
spring:
  mail:
    host: smtp.163.com
    username: 15671190765@163.com
    password: XXX   #此为邮箱的snmp密码
  rabbitmq:
    addresses: localhost
    username: admin #rabbitmq的账号名密码均为admin
    password: admin 
    virtual-host: / #虚拟主机采用默认的/
  data:
    redis:
      port: 6379
      host: localhost #redis均为默认配置及端口,不配置yml也可

3.Rabbitmq配置类:RabbitConfiguration

java 复制代码
package com.rabbitmqemail.config;

import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class RabbitConfiguration {

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

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, MessageConverter converter) {
        RabbitTemplate template = new RabbitTemplate(connectionFactory);
        template.setMessageConverter(converter);
        return template;
    }

    //给Bean队列取名为邮件队列
    @Bean("emailQueue")
    public Queue emailQueue(){
        return QueueBuilder
                .durable("mail")  //给邮件队列取名为email
                .build();
    }


}

Rabbitmq监听类:MailQueueListener

java 复制代码
package com.rabbitmqemail.listener;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;

import java.util.Map;
@Component
@RabbitListener(queues = "mail") //指定一下消息队列,该消息队列是mail消息队列
public class MailQueueListener{

    @Autowired
    JavaMailSender sender;

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

    @RabbitHandler
    public void sendMailMessage(Map<String,Object> data){
//        System.out.println(data.get("email")+" "+data.get("code"));
        String email = (String) data.get("email");
        Integer code = (Integer) data.get("code");
        SimpleMailMessage  message= createMessage("欢迎注册我们的网站","您的验证码为"+code+",有效时间三分钟,为了保障您的安全,请勿向他人泄露验证码信息。",email);
        System.out.println("message1:"+message.getText());
        if (message == null) return;
        sender.send(message);
    }

    private SimpleMailMessage createMessage(String title,String content,String email){
        SimpleMailMessage message = new SimpleMailMessage();
        message.setSubject(title);  //主题
        message.setText(content);   //内容
        message.setTo(email);       //发送目标邮箱
        message.setFrom(username);  //源发送邮箱
        return message;
    }
}

接口类:emailService

java 复制代码
package com.rabbitmqemail.service;

public interface emailService {
    String EmailVerifyCode(String email);
}

接口实现类:emailServiceImpl

java 复制代码
package com.rabbitmqemail.service.impl;


import ch.qos.logback.classic.pattern.MessageConverter;
import com.alibaba.fastjson2.JSONObject;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmqemail.service.emailService;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.Map;
import java.util.Random;
import java.util.concurrent.TimeUnit;

@Service
public class emailServiceImpl implements emailService {

    @Autowired
    AmqpTemplate amqpTemplate; //将消息队列注册为bean

    @Autowired
    StringRedisTemplate redisTemplate;


    @Override
    public String EmailVerifyCode(String email) {
        Random random = new Random();
        int code = random.nextInt(899999)+100000;  //生成六位数的验证码
//        System.out.println("email:"+email+" code:"+code);
        Map<String,Object> data = Map.of("email",email,"code",code);
        amqpTemplate.convertAndSend("mail",data); //向消息队列中发送数据
        redisTemplate.opsForValue()
                .set(email,String.valueOf(code),3, TimeUnit.MINUTES);
        //用redis来存取数据
        return null;
    }
}

测试类:RabbitmqEmailApplicationTests

java 复制代码
package com.rabbitmqemail;

import com.rabbitmqemail.service.impl.emailServiceImpl;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class RabbitmqEmailApplicationTests {


    @Autowired
    private emailServiceImpl emailService;

    @Test
    void contextLoads() {
        emailService.EmailVerifyCode("2482893650@qq.com");
    }

}

测试结果:此时指定邮箱已收到验证码

测试项目开源仓库:

java 复制代码
https://gitee.com/zhang-zilong_zzl/Rabbitmq-email

📑文章末尾

相关推荐
Tigshop开源商城18 小时前
『物流设置+SEO优化』Tigshop开源商城系统 JAVA v5.8.26 版本更新!
java·开源商城系统·tigshop
Tigshop开源商城20 小时前
『订单税率+收货地址校验国家字段』功能上新|跨境运营更高效,Tigshop开源商城系统 JAVA v5.8.23 版本更新
java·开源商城系统·tigshop
REDcker20 小时前
C++变量存储与ELF段布局详解 从const全局到rodata与nm_readelf验证实践
java·c++·面试
最后一支迷迭香1 天前
Redis+ThreadLocal实现防重复提交,参考美团GTIS防重系统
redis·threadlocal·防止重复提交
kobesdu1 天前
【ROS2实战笔记-19】ROS2 生命周期节点的启动顺序、状态转换陷阱与热备方案
java·前端·笔记·机器人·ros·ros2
neo_Ggx231 天前
Maven 版本管理详解:SNAPSHOT、Release 与 Nexus 仓库的区别和影响
java·maven
matlabgoodboy1 天前
软件开发定制小程序APP帮代做java代码代编写C语言设计python编程
java·c语言·小程序
江离w1 天前
新版vibecoding项目初始化指令
java
tongluowan0071 天前
Spring MVC 底层工作流程+源码分析
java·spring·mvc
java1234_小锋1 天前
SpringBoot为什么要禁止循环依赖?
java·数据库·spring boot