消息队列 rabbitMQ 的初探?

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

  1. 这里就使用我的云服务器来演示下rabbitmq的安装,首先我们来查看我的linux下的docker的的版本,docker的安装这里就不介绍了。

2.下载对应版本的镜像

3.查看下载好的镜像

4.使用命令启动

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.邮件监听

/**
 * 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.推送队列

/**
 * 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.测试类

/**
 * 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中。

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

关注公众号领取资源

公众号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值