RabbitMQ之消息生产消费

本文介绍了如何使用SpringBoot2.0.4和RabbitMQ3.7.7实现消息生产者和消费者。通过消息确认机制、Redis缓存确保消息不丢失,结合TTL和DLX实现消费异常的延迟重试,以及处理消息幂等性问题。详细讲述了定义消息交换机和队列、用户注册场景模拟、生产者确认机制、消息丢失处理和消费者监听队列的实现。
摘要由CSDN通过智能技术生成

前言

  前面学习了RabbitMQ的使用场景和基础概念,现在来用一个RabbitMQ案例,来正式学习一下MQ的使用。

  这个案例分为两个部分,消息生产者和消息消费者。模拟用户注册场景,生产者将用户手机号发送到MQ,消费者监听MQ队列,获取用户手机号发送短信。

具体实现功能如下:

  • 使用RabbitMQ客户端消息confirm和redis,确保消息正确发送到MQ,不会产生丢失;
  • 结合消息过期(TTL)和死信队列(DLX)实现消费异常的延迟重试;
  • 消息处理失败达到最大重试次数之后,将其发送到失败队列,等待人工处理。

正文

项目版本:Springboot2.0.4、RabbitMQ3.7.7
项目具体流程如下:

在这里插入图片描述

具体代码
1、定义一个消息交换机和三个消息队列。
@Slf4j
@Configuration
public class RabbitConfig {
    /**
     * 声明一个交换机
     * @return
     */
    @Bean
    public TopicExchange smsCaptchaExchange() {
        return new TopicExchange("sms_captcha", true, false);
    }
    
    /**
     * 正常的消费队列
     * @return
     */
    @Bean
    public Queue smsCaptchaQueue() {
        return new Queue("sms@captcha", true, false, false);
    }
    /**
     * 延时重试队列
     */
    @Bean
    public Queue smsCaptchaRetryQueue() {
        Map<String, Object> arguments = new HashMap<>();
        arguments.put("x-message-ttl", 10 * 1000);
        arguments.put("x-dead-letter-exchange", "sms_captcha");
        arguments.put("x-dead-letter-routing-key", "sms.captcha");
        return new Queue("sms@captcha@retry", true, false, false, arguments);
    }
    /**
     * 处理失败后存放消息的队列
     * @return
     */
    @Bean
    public Queue smsCaptchaFailedQueue() {
        return new Queue("sms@captcha@failed", true, false, false);
    }



    /**
     * 将队列与交换机绑定
     * @return
     */
    @Bean
    public Binding smsC
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值