📑前言
本文主要是【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.comusername: 15671190765@163.compassword: XXX #此为邮箱的snmp密码rabbitmq:addresses: localhostusername: admin #rabbitmq的账号名密码均为adminpassword: admin virtual-host: / #虚拟主机采用默认的/data:redis:port: 6379host: 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 {@Beanpublic MessageConverter messageConverter(){return new Jackson2JsonMessageConverter();}@Beanpublic 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{@AutowiredJavaMailSender sender;@Value("${spring.mail.username}")String username;@RabbitHandlerpublic 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 {@AutowiredAmqpTemplate amqpTemplate; //将消息队列注册为bean@AutowiredStringRedisTemplate redisTemplate;@Overridepublic 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 {@Autowiredprivate emailServiceImpl emailService;@Testvoid contextLoads() {emailService.EmailVerifyCode("2482893650@qq.com");}}
测试结果:此时指定邮箱已收到验证码
测试项目开源仓库:
https://gitee.com/zhang-zilong_zzl/Rabbitmq-email