当前位置: 首页 > article >正文

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

📑前言

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

🎬作者简介:大家好,我是听风与他🥇
☁️博客首页:CSDN主页听风与他
🌄每日一句:狠狠沉淀,顶峰相见

目录

    • 📑前言
  • SpringBoot项目整合Redis,Rabbitmq发送、消费、存储邮件
    • 1.导入mail,redis,rabbitmq的依赖
    • 2.配置application.yml文件
    • 3.Rabbitmq配置类:RabbitConfiguration
    • Rabbitmq监听类:MailQueueListener
    • 接口类:emailService
    • 接口实现类:emailServiceImpl
    • 测试类:RabbitmqEmailApplicationTests
    • 测试项目开源仓库:
    • 📑文章末尾

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

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

        <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文件

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

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

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

package com.rabbitmqemail.service;

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

接口实现类:emailServiceImpl

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

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");
    }

}

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

在这里插入图片描述

测试项目开源仓库:

https://gitee.com/zhang-zilong_zzl/Rabbitmq-email

📑文章末尾

在这里插入图片描述


http://www.kler.cn/a/149039.html

相关文章:

  • 链游系统定制化开发:引领游戏产业的新时代
  • 2024开发者浏览器必备扩展,不允许还有人不知道~
  • 10款PDF翻译工具的探索之旅:我的使用经历与工具特色!!
  • 深入理解接口测试:实用指南与最佳实践5.0(二)
  • 网页web无插件播放器EasyPlayer.js点播播放器遇到视频地址播放不了的现象及措施
  • 【前端】JavaScript高级教程:线程机制与事件机制
  • 代码随想录算法训练营 ---第四十九天
  • 在Visual Studio Code中安装加速TypeScript程序开发的插件
  • Git工作流和Commit规范
  • 12:kotlin类和对象 -- 继承
  • C语言第三十六弹--实现转移表的多种方法
  • redis基本数据结构
  • FFA 2023|字节跳动 7 项议题入选
  • 计算机基础知识57
  • Ubuntu 上使能 SELinux
  • 王者小游戏
  • 【好用的个人工具】在Docker环境下部署Simple mind map思维导图工具
  • 云原生系列Go语言篇-泛型Part 2
  • 【Python】jieba分词基础
  • 【C++初阶】五、类和对象(日期类的完善、流运算符重载函数、const成员、“”取地址运算符重载)
  • python与机器学习1,机器学习的一些基础知识(完善ing)
  • Prometheus的详细部署
  • spring boot spring-retry重试机制
  • 算法 离散化
  • CVE-2022-4886 ingress命令注入复现与分析
  • 设计模式—依赖倒置原则(DIP)