MQ的死信队列和延迟队列 | RabbitMQ系列(十)

这是我参与8月更文应战的第15天,活动概况查看:8月更文应战


相关文章

MyBatis系列汇总:MyBatis系列


前语

  • 讲到这儿,MQ的根底也讲的差不多了,这是根底文章的最终一篇了!下面就会整合SpringBoot来进行实战讲解了!

  • 死信部队,望文生义就是无法被消费的音讯。

  • 有哪些原因会导致音讯无mybatisplus分页查询交流被消费呢?

    • 音讯架构师薪酬一月多少TTL过期。
    • 部队超长,就是部队满了,新的音讯无法再加入到MQ部队中。
    • 音讯被拒绝架构师证书,即 basic.reject或许basimybatis批量更新c.nack,而且拒绝放回交流原部队(requeue=false)。
  • 运用场景

    • 为了确保订单事务的音讯数据不丢掉,需求运用到 RabbitMQ 的死信部队机制,当音讯消费产生异常时,将音讯投入死信部队中。
    • 用户在商城下单成功并点击去支付后在指定时刻未支付时主动失效。
    • 买火车票,半小时未付款即订单失效。
  • 逻辑架构

    • MQ的死信行列和推迟行列 | RabbitMQ系列(十)

一、死信部队

①、音讯TTL过期

  • 生产者

  • /**
    * 这是一个检验的生产者
    *@author DingYon架构gJun
    *@date 2021/8/6
    */
    public class DyProducerTest_dead {
    private static final String EXCHANGE_NAME = "normal_exchange";
    /**
    * 这儿为了便当mybatis面试题,咱们运用main函数来检验
    * 纯属看你个人选择
    * @param args
    */
    public static void main(String[] args) throws Exception {
    publishMess架构师和程序员的差异ageIndividually();
    }
    public static void publishMessageIndividually() throws E交流的重要性心得体会xception {
    //运用东西类来创建通道
    Channel channelmybatis结构 = Rmybatis面试题abbitMqUtils.getChannel();
    channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExcha架构图用什么软件ngeType.DIRECT);
    //设置过期时刻,单交流技巧位为ms
    AMQP.BasicProperties properties = new AMQP.BasicProperties().builde架构师薪酬一月多少r().expiration("10000").build();Spring
    for (int i=0;i<5;i++){
    String msg = i+"音讯";
    //发送音讯到指定交流机中
    channel.basicPublish(EXCHANGE_NAME,"zhangsan",properties,msgspring.getBytes());
    System.MyBatisout.println("我是生产者,我发送了+"+msg);
    }mybatis批量更新
    }
    }
    
  • 顾客

  • /**
    * 这是一个检验的顾客
    *
    * @author DingYongJun
    * @date 2021/8/6
    */
    public classmybatis一对多 DyConsumerTest_dead01 {
    //一般交流机
    private static f交流技巧许医师攻略版电视剧inal String EXCHANGE_NAME = "normal_exchange";
    //死信交流机,专门消费私信部队里面的音讯
    priv交流的艺术atspringcloud五大组件e交流 static final String DEAD_NAME = "dead_exchange";
    pu交流作文blic static void main(S交流的三要素是什么tring[] args) throw架构s Exceptspring是什么意思ion {
    Channel channel = RabbitMqUspring_结构tils.getChannel();
    //先声明两个交流机
    channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.DIRECT);//springboot面试题一般
    channel.exchangeDeclare(DEAD_NAM架构图用什么软件做E, BuiltinExchangeType.DIRECTspringcloud五大组件);//死信
    //声明死springboot面试题信部队
    String deadQueueName = "dead_queue";
    channelmybatis作业原理.queueDeclspringmvc的作业原理are(deadQueueName,false,false,false,n架构图用什么软件做ull);
    //将死信部队绑定到交流机上
    channel.queueBind(deadQueueNam交流技巧和方法e,DEAD_NAME,"springcloudlisi");
    //正常部队绑定死信部队信息
    Map&lmybatis-plust;String, Object> params = new HashMyBatisMap<>();
    //正常部队设置死信交流机 参数 key 是固定值
    params.put("x-dead-letter-espring面试题xchange", DEAD_NAME);
    //正常架构图模板部队设置死信 routing-key 参数 key 是固定值
    params.put("x-dead-letter-routing-key", "lisi");
    Strinspringcloud五大组件g normalQueue = "normal-queue";
    channel.queueDeclare(springboot面试题normalQueue, false, false, false, params);
    channel.quespringboot常用注解ueBind(normalQueue, EXCHANGE_NAME, "zhangsan");
    System.out.println("等候接springcloud收音讯.....");
    Deliver交流技巧和方法Callback deliverCallback = (consumerTa架构图g, delivespringboot常用注解ry) -> {
    String message = new String(delivery.getBody(), "UTF-8");
    Systmybatis作业原理em.out.println("Consumer01springboot 接纳到音讯"+message);
    };
    channel.basi架构师薪酬一月多少cConsuspringmvc的作业原理me(normalQueue, true, deliverCallback, consumerTag -> {
    });
    }
    }
    
  • 先建议顾客,然后中止,否则音讯直接消费掉了,为了模仿mybatis分页让音讯能够十秒后过期

  • 查看后台页面,能够看到,一般部队和死信部队都建议成功了

  • MQ的死信行列和推迟行列 | RabbitMQ系列(十)

  • 此刻建议生交流的艺术产者,发送5条音讯

  • MQ的死信行列和推迟行列 | RabbitMQ系列(十)

  • 能够看到,一般部队中成功接受了5条音讯。

  • MQ的死信行列和推迟行列 | RabbitMQ系列(十)

  • 等候10秒钟,由于咱们封闭了顾客,所以音讯会过期,能够看到5条音讯全部进入架构师和程序员的差异了死信部队中。

  • 为什么死信中是10条?由于我早年已经检验了一遍,原先就有5条音讯了。

  • MQ的死信行列和推迟行列 | RabbitMQ系列(十)

  • 这时候咱们写专门消费私信部队的顾客

  • /**
    * 这是一个检验的顾客
    *@author DingYongJun
    *@date 2021/8/1
    */
    public class DyConsumerTest_dead02 {
    private stati交流技巧和方法c final String DEAD_EXCHANGE = "dead_exchange";
    public static void main(String[] a交流的重要性的名言rgv架构图) th交流的三要素是什么rows Exception {
    Channel channel = RabbitMqUtils.getChspringcloud五大组件annel();
    channel.exchangeDeclare(DEAD_EXCHANGE, Builti交流技巧nExchangeType.DIRECT)交流;
    String deadQue架构图模板ue = "despringmvc的作业原理ad_queue";
    channel.queueDmybatisplus分页查询eclare(deadQueue, false, false, false, null);
    channel.quspringcloudeueBind(deadQueue, DEAD_EXCHAN架构是什么意思GE, "lisi");mybatis一级缓存和二级缓存
    System.out.println("等候接纳死信部队音讯.....mybatis批量更新");
    DeliverCallback delivemybatisplus分页查询rCallback = (consumerTag, demybatis批量更新livery) -> {
    S架构师证书tring message = new String(delivery.getBody(), "UTF-8");
    System.out.架构师println("Consumer02 接纳死信部队的音讯" + message);
    };
    channspringmvc的作业原理el.basicConsume(deadQueuspringmvc的作业原理e, true, deliverCallback, consumerTag -> {
    });
    }
    }
    
  • 建议该顾客看作用

  • MQ的死信行列和推迟行列 | RabbitMQ系列(十)

  • MQ的死信行列和推迟行列 | RabbitMQ系列(十)

  • 能够看到,成功被消费掉。

②、部队超长

  • 生产者注释spring_结构掉过期时交流能力间参数

  • MQ的死信行列和推迟行列 | RabbitMQ系列(十)

  • 正常顾客,添加部队长度的限制为3

  • MQ的死信行列和推迟行列 | RabbitMQ系列(十)

  • 留意这时候要把原先的部队删去,由于参数产生了改动,不删去建议会报错。

  • MQ的死信行列和推迟行列 | RabbitMQ系列(十)

  • 建议一般部队顾客和生产者

  • MQ的死信行列和推迟行列 | RabbitMQ系列(十)

  • 正常部队只保存了3条信息,而死信部队有7条。证明超过了部队的容量也会进入死信MyBatis部队。

③、音讯被拒

  • 生产者代码不变

  • 顾客模仿接受音讯拒绝

  • /**
    * 这是一个检验的顾客
    *
    * @author DingYongJun
    * @date 2021/8架构师证书/6
    */架构师证书
    public classpringboot面试题s DyConsumerTest_dead01 {
    //一般交流机
    private static final String EXCHANGE_NAME = "normal_exchange";
    //死信交流机,专门消费私架构图信部队里面的音讯
    privamybatis一对多te static final String DEAD_Nspringcloud五大组件AME = "dead_exchange";
    public static void main(String[] args) throws Exception {
    Channel ch架构图模板annel = RabbitMqUtmybatis一级缓存和二级缓存ils.getChannel();
    //先声明两个交流机
    channel.exchangeDeclare(EXCmybatis面试题HANGE_NAME, BuiltinE架构师xchangeTyp架构师需求把握哪些常识e.DIRECT);//一般
    channel.exchangeDeclare(DEAD_NA架构师需求把握哪些常识ME, BuiltinExchangeType.DI交流技巧RECT);//死信
    //springboot声明死信部队
    String deadQueue交流能力Name = "dead_queue";
    channel.queueDeclare(deadQueue交流能力Name,false,false,false,null架构图用什么软件做);
    //将spring是什么意思死信部队绑定到交流机上
    channel.queueBind(deadQueueName,DEAD_NAME,"lisi");
    //正常部队绑定死信部队信息
    Map<String, Object> params = new HashMap<>();
    //正常部队设置死信交流机 参数 key 是固定值
    params.put("x-dead-letter-excha架构师nge", DEAD_N交流技巧许医师攻略版电视剧AME);
    //正架构师薪酬一月多少常部队设置死信 r交流技巧outing-key 参数 key 是mybatis一对多固定值
    params.put("x-dead-letterMyBatis-routing-key", "lisi");
    //设spring置部队的长mybatisplus分页查询度限制为3
    //        params.put("x-max-length",3);
    String normalQueue = "交流的三要素是什么normal-queuemybatisplus分页查询";
    channel.queueDeclare(no交流的重要性心得体会rmalQueue, false, false, false, pspringarams);
    channel.queu交流的重要性的名言eBind(normalQueuspringboot面试题e, EXCHANGE_NAM交流技巧和方法E, "zhangsan");
    System.out.println("等候接纳音讯.....");
    DeliverC架构师allbmybatis分页ack deliverCallback = (consumerTag, delivery)springboot面试题 -> {
    String message =交流的重要性心得体会 new String(delivery.getBody(), "UTF-8");
    if (message.equals("3音讯")){
    System.out.println("收到这个音讯但是我架构规划不想要:"+message);
    //requeue设置为false,标明拒springboot常用注解绝从头入队,假设该部队装备了死信部队,拒mybatis结构绝后交流时机springmvc的作业原理将其发送的死信部队傍边。设置true的话,架构图用什么软件做会主动从头入列。
    channel.basicReject(delivery.getEnvelope().getDeliveryTag(),false);
    }else {
    //其他音讯正常应对
    System.out.println("C架构图onsumer01 接纳到音讯"+message);
    channel.basicAc交流的重要性心得体会k(delivspringmvc的作业原理ery.getEnvelope().getDeliverspring是什么意思yTag(), false);
    }
    };
    channel.springbasicConsume(normalQueuemybatis分页, true, deliverCallback, consumerTag -> {
    });
    }
    }
    
  • 履行生产者后

  • MQ的死信行列和推迟行列 | RabbitMQ系列(十)

  • 架构图起顾客后

  • MQ的死信行列和推迟行列 | RabbitMQ系列(十)

二、推迟队交流的重要性心得体会

  • 延时部队,部队内部是有序的,最重要的特性就体现在它的延时属性上,延时部队中的元素是期望在指定时刻到架构图用什么软件做了今后架构师和程序员的差异或之前取出和处理。

  • 简单来说,延时部队就是用来寄存需求在指定时刻被处理的元素的部队。

  • 运用场景

    • 订单在十分钟之内未支付则主MyBatis动吊销
    • 预定会议后mybatis作业原理,需求在架构师需求把握哪些常识预定的时刻点前十分钟告知各个与会人员参加会议
  • 这些场景都有一个特征,需求在某个事情产生之后或许之前的指定时刻点结束某一项任务

  • 设置TTL

  • 办法一

    • 对每条音讯设置过交流的艺术期时刻。
    • 对部队设springboot面试题置过期时刻。
  • 这儿就不用代码演示了,架构是什么意思后边的整合SpringBoot的实战文章会讲解!

  • 大约讲解下思路

    • 咱们有一个正常队交流的重要性的名言
    • 一个私信部队。
    • 对正常部队中的音讯设置交流技巧过期时刻。
    • 假设到期之后该音讯进入死信部队。
    • 然后有专门的顾客springcloud五大组件消费私信的部队的音讯。
    • 这样是不是就相当于推迟部队?
  • 至于为什么在这儿不讲,由于这玩意是部队,先进先出,不用MQ插件来完结的话,看不出来作用,留在实战文章对比着具体解说吧!


路漫漫其修远兮,吾必将上下求索~

架构师如你以为i博主写的不错!写作不易,请点赞、关注、议论给博主一个鼓动吧~hahah

发表评论

提供最优质的资源集合

立即查看 了解详情