2019年我元气满满的回来了


转眼已经两年了真是实实在在的两年多了记得搭建这个github博客还是当
时寒假在家听同学偶然说起才想着也搭建一个不用服务器的博客,想想时间
过的真的快啊,现在的我已经实现了自己人生目标的以小步,在上海这个地方
成为了一个实实在在的码农了。

有想博主的可以到我的博客项目:http://iclyj.cn。

也可以来我的CSDN: http://blog.csdn.net/m0_37862829。

来多多支持我。。。。今天带大家来看看rabbitMQ的使用吧!


今天刚把github博客恢复就简单的写点东西吧!之后我会时不时的在这总结归纳自己,
希望大家和我一样能够一步步的实现自己当初的目标,不忘初心,方的始终。

一、简单的介绍下rabbitMQ的安装

  1. 这里就使用我的云服务器来演示下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中。

主题模式监听自己关心的邮件时发送邮件给对应的人,后续有空再将测试的效果图分析出来。

大家可以关注下我的公众号每天都会更新学习心得和领取资料加入我们大家一起进步吧!