转眼已经两年了真是实实在在的两年多了记得搭建这个github博客还是当
时寒假在家听同学偶然说起才想着也搭建一个不用服务器的博客,想想时间
过的真的快啊,现在的我已经实现了自己人生目标的以小步,在上海这个地方
成为了一个实实在在的码农了。
今天刚把github博客恢复就简单的写点东西吧!之后我会时不时的在这总结归纳自己,
希望大家和我一样能够一步步的实现自己当初的目标,不忘初心,方的始终。
一、简单的介绍下rabbitMQ的安装
- 这里就使用我的云服务器来演示下rabbitmq的安装,首先我们来查看我的linux下的docker的的版本,docker的安装这里就不介绍了。
2.下载对应版本的镜像
3.查看下载好的镜像
4.使用命令启动1
docker run -di --name=lyj_rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 rabbitmq:management
二、测试队列
1.测试类
2.对应的消费者
- 直接模式
- 分裂模式
- 主题模式
三、接下来写个监听邮件发送的的队列
1.包的结构
2.邮件监听1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34/**
* Created by lyj on 2019/1/22.
* 邮箱监听
*/
@Component
@RabbitListener(queues = "mail")
public class MailListener {
private static final Logger LOGGER = LoggerFactory.getLogger(MailListener.class);
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String sender;
/**
* 监听到消息发送邮件
* @param map
*/
@RabbitHandler
public void setMailSender(Map<String,Object> map){
String mail = String.valueOf(map.get("mail"));
String code = String.valueOf(map.get("code"));
LOGGER.info("手机号:{}",map.get("mail"));
LOGGER.info("验证码:{}",map.get("code"));
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(sender);
message.setTo(mail); //发送邮件的邮箱
message.setSubject("主题:验证码");
message.setText(code);
mailSender.send(message);
}
}
2.推送队列1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37/**
* Created by lyj on 2019/1/22.
* 推送队列
*/
@Component
public class RabbitServer {
private static final Logger LOGGER = LoggerFactory.getLogger(RabbitServer.class);
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private RabbitTemplate rabbitTemplate;
/**
* 发送6位验证码
*/
public void snedMail(String mail){
//1.生成6位验证码
Random random = new Random();
int max = 999999; //最大数
int min = 100000; //最小数
int code = random.nextInt(max); //生成随机数
if (code < min){
code = code + min;
}
LOGGER.info("生成的随机验证码为:{}",code);
//2.将验证码存入redis中
redisTemplate.opsForValue().set("mailcode_"+mail, code +"", 5, TimeUnit.MINUTES); //五分钟过期
//3.将验证码和手机号发送到rabbitmq中
Map<String,Object> map = new HashMap();
map.put("mail",mail);
map.put("code",code+"");
rabbitTemplate.convertAndSend("mail",map);
}
}
3.测试类1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/**
* Created by lyj on 2019/1/22.
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = RabbitApplication.class)
public class RabbitServerTest {
@Autowired
private RabbitServer rabbitServer;
@Test
public void sendSimpleMail() {
rabbitServer.snedMail("1421805850@qq.com");
}
}
其代码中还是用了redis存储失效时间当有调用发送邮件的时候推送到消息队列rabbitmq中。
主题模式监听自己关心的邮件时发送邮件给对应的人,后续有空再将测试的效果图分析出来。