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

📑文章末尾

相关推荐
wgego27 分钟前
基础的反序列化一些总结(php和java)
java·开发语言·笔记
BullSmall1 小时前
Another Redis Desktop Manager(ARDM)下载指南
数据库·redis·缓存
机建狂魔1 小时前
Codex 接入第三方模型 API 实战:以 Mimo 为例
java·服务器·数据库·ai·ai编程·codex
山峰哥2 小时前
数据库工程与SQL调优:从慢查询到秒级响应的实战之路
java·开发语言·数据库·sql·深度优先·启发式算法
乐观的Terry2 小时前
11、发布系统-用户认证与权限体系
java·spring boot·spring·spring cloud·mybatis
前端开发张小七2 小时前
Java 学习笔记 · 第二课:面向对象核心(封装、继承、多态)及接口与异常
java·后端·程序员
wangjialelele2 小时前
Selenium4 + Java Web自动化测试入门指南:从环境搭建到常用操作详解
java·开发语言·前端·测试工具·自动化
孙启超2 小时前
【AI应用开发】LangChain 中 Chain 和 Agent 核心区别?
java·人工智能·langchain·llm·rag·ai应用开发·agent loop
leoZ2312 小时前
实战复盘:用 Claude Code 从零搭一个 GitHub PR 统计工具
java·人工智能·python·深度学习·自然语言处理·github·llama
William Dawson2 小时前
【踩坑实录|Hive1\.2\.1数据服务接口5大疑难问题调试与全方位优化方案】
java·hive·spring boot