欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > 【黑马程序员RabbitMQ高级】自用笔记

【黑马程序员RabbitMQ高级】自用笔记

2025/5/10 2:32:33 来源:https://blog.csdn.net/qq_45664326/article/details/147755308  浏览:    关键词:【黑马程序员RabbitMQ高级】自用笔记

基础篇有人写的很好了,放个链接:
https://blog.csdn.net/weixin_73077810/article/details/133836287?spm=1001.2014.3001.5506

发送者可靠性

生产者重连

在这里插入图片描述

生产者确认

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

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

MQ的可靠性

在这里插入图片描述

数据持久化

RabbitMQ实现数据持久化包括3个方面:

  • 交换机持久化
  • 队列持久化
  • 消息持久化

PageOut会使得消息队列阻塞,但消息一直是持久化的话,只是效率稍微低一些,不会阻塞。

Lazy Queue

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

消费者的可靠性

消费者确认机制

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

消费失败处理

失败重试机制
在这里插入图片描述
在这里插入图片描述
用第三种比较好:
在这里插入图片描述
在这里插入图片描述

业务幂等性

在程序开发中,幂等性指的是同一个业务,执行一次或多次对业务状态的影响是一致的。
在这里插入图片描述

方案一:唯一消息 id

在这里插入图片描述
用 Jackson2JsonMessageConverter 自动生成 id
在这里插入图片描述
缺点:性能上有影响,业务处理方的工作会变得复杂。

方案二:业务判断

结合业务逻辑,基于业务本身做判断。
例如:要在支付后修改订单状态为已支付,应该在修改前先查询订单状态,判断是否为未支付。只有未支付的订单才需要修改,其他状态不做处理(要特别注意多种状态时,哪种状态需要修改)。

这个要多看看,用 update 是怎么优化的

在这里插入图片描述

延迟消息

生产者发送消息时,指定一个时间,消费者不会立刻收到消息,而是在指定时间之后才收到消息。
应用场景:订单支付(超时)
需要注意的是:延时消息对cpu的消耗较大,只适合延时时间相对较短的场景。
在这里插入图片描述

死信交换机

当一个队列中的消息满足以下情况之一,就会成为死信( dead letter ):

  • 消费者使用 basic.reject 或 basic.nack 声明消费失败,并且消息的 requeue 参数设置为 false
  • 消息是一个过期消息(达到了队列或消息本身设置的过期时间),超时无人消费
  • 要投递的队列消息堆积满了,最早的的消息可能成为死信

如果队列通过 dead-letter-exchange 属性指定了一个交换机,那么该队列中的死信就会投递到这个交换机中,这个交换机就被称为死信交换机(Dead Letter Exchange,简称DLX)。
在这里插入图片描述

延迟消息插件(推荐)

官方推出了一个插件,原生支持延迟消息功能。
该插件的原理是设计了一种支持延迟消息功能的交换机,当消息投递到交换机后可以暂存一定时间,到期后再投递队列。(需要手动安装)

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

取消超时订单

在这里插入图片描述
解决方法:将30min拆分成短的时间
在这里插入图片描述

最后一节的代码可以多看看。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词