当前位置:   article > 正文

Day34_RabbitMQ—高级部分_channel.basicack(deliverytag, false);

channel.basicack(deliverytag, false);


在这里插入图片描述

一、RabbitMQ高级特性

1.消息的可靠投递

在这里插入图片描述
1.confirm确认模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.return模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.Consumer Ack

Consumer Ack表示消费端收到消息后的确认方式
在这里插入图片描述
1.自动签收

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.手动签收

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结:
①在rabbit:listener-container标签中设置acknowledge属性,设置ack方式为none表示自动确认;设置ack方式为manual表示手动确认。

②如果在消费端没有出现异常,则调用channel.basicAck(deliveryTag,false);方法确认签收消息

③如果出现异常,则在catch中调用 basicNack,拒绝消息,让MQ重新发送消息。

3.消息可靠性总结

在这里插入图片描述

4.消费端限流

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.不让签收会发生什么?

在这里插入图片描述
在这里插入图片描述

2.不让签收,而且不限制消费者取消息的数量会发生什么?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.TTL

在这里插入图片描述
在这里插入图片描述

1.队列的统一过期

在这里插入图片描述
在这里插入图片描述

2.消息的单独过期

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.消息过期 和 队列过期的处理方式

  • 队列过期后,会将队列中的所有消息全部移除。
  • 消息过期后,先不会处理,只有消息在队列顶端,才会判断其是否过期(移除掉)。比如10条消息,你设置其中第5条消息存活时间为5秒,那么5秒后第五条消息并不会被移除,你看到的待处理的消息还是有10条。消息是一条一条处理的,等处理到这个第五条过期的消息时,此时才会判断它过期了没有,如果过期了那就移除。这种惰性处理会节省性能(省得你一直判断队列中有没有过期消息)。

6.死信队列概述(面试重点)

1.定义

这里是引用

2.消息成为死信的三种情况(面试高频):

  1. 队列消息长度达到限制(设置一个队列最大存储10条消息,当第11条消息进来的时候就会成为死信);
  2. 消费者拒接消费消息(basicNack),并且不把消息放入原目标队列(requeue = false)。比如:你之前的代码 channel.basicNack(deliveryTag,true,false);就是消费者拒接消费消息并且不把消息放入原目标队列
  3. 原队列存在消息过期设置,消息到达超时时间未被消费;

3.队列绑定死信交换机:

在这里插入图片描述

7.死信队列代码实现(面试重点)

1.测试过期时间导致成为死信消息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.测试超过长度限制导致成为死信消息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.测试消息拒收导致成为死信消息

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.小结

1、死信交换机和死信队列和普通的没有区别
2、当消息成为死信后,如果该队列绑定了死信交换机,则消息会被死信交换机重新路由到死信队列
3、消息成为死信的三种情况
(1)队列消息长度达到限制
(2)消费者拒绝消费消息,并且不重回队列
(3)原队列存在消息过期设置,消息到达超时时间未被消费

8.延迟队列(面试重点)

1.延迟队列

在这里插入图片描述
在这里插入图片描述

2.代码实现

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 延迟队列 指消息进入队列后,可以被延迟一定时间,再进行消费。
  2. RabbitMQ没有提供延迟队列功能,但是可以使用 : TTL + DLX 来实现延迟队列效果。

二、RabbitMQ 应用问题

1.消息可靠性保障——消息补偿机制

在这里插入图片描述

2.消息幂等性保障——乐观锁解决方案

  • 幂等性指一次和多次请求某一个资源,对于资源本身应该具有同样的结果。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。
  • 在MQ中指,消费多条相同的消息,得到与消费该消息一次相同的结果。
  • 假如你买东西花了500,结果由于网络闪断什么的原因导致花500这个消息发送了两次,消费端拿到这条消息必须保证只扣一次才不会出现错误。

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/127060
推荐阅读
相关标签
  

闽ICP备14008679号