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

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

消息队列 rabbitMQ 的初探?

2.下载对应版本的镜像

消息队列 rabbitMQ 的初探?

3.查看下载好的镜像

消息队列 rabbitMQ 的初探?

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

消息队列 rabbitMQ 的初探?

二、测试队列

1.测试类
消息队列 rabbitMQ 的初探?
2.对应的消费者

  • 直接模式
    消息队列 rabbitMQ 的初探?
  • 分裂模式
    消息队列 rabbitMQ 的初探?
  • 主题模式
    消息队列 rabbitMQ 的初探?

三、接下来写个监听邮件发送的的队列

1.包的结构
消息队列 rabbitMQ 的初探?
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("[email protected]");
    }
}

其代码中还是用了redis存储失效时间当有调用发送邮件的时候推送到消息队列rabbitmq中。

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

关注公众号领取资源

消息队列 rabbitMQ 的初探?

相关文章: