当前位置:首页 > 科技  > 软件

RabbitMQ高级之失败重试机制(含源码)

来源: 责编: 时间:2023-11-28 09:36:26 326观看
导读一、失败重试机制 当消费者出现异常后,消息会不断requeue(重新入队)到队列,再重新发送给消费者,然后再次异常,再次requeue,无限循环,导致mq的消息处理飙升,带来不必要的压力。 为此,可利用Spring的retry机制,在消费者出现

一、失败重试机制

    当消费者出现异常后,消息会不断requeue(重新入队)到队列,再重新发送给消费者,然后再次异常,再次requeue,无限循环,导致mq的消息处理飙升,带来不必要的压力。Chh28资讯网——每日最新资讯28at.com

    为此,可利用Spring的retry机制,在消费者出现异常时利用本地重试,而不是无限制的requeue到mq队列。Chh28资讯网——每日最新资讯28at.com

配置参数如下:Chh28资讯网——每日最新资讯28at.com

listener: # 开启消费者确认其机制      simple:        prefetch: 1  #消费者每次只能获取一条消息,处理完才能获取下一条(可实现能者多劳)        acknowledge-mode: AUTO  # none:关闭ack;manual:手动ack;auto:自动ack        retry:          enabled: true  #开启消费者失败重试          initial-interval: 1000ms  #初始的失败等待时长为1秒          multiplier: 1 #下次失败的等待时长倍数,下次等待时长 = multiplier * last-interval          max-attempts: 3 #最大重试次数          stateless: true #true无状态;false有状态。如果业务中包含事务,这里改为false

测试结果:Chh28资讯网——每日最新资讯28at.com

图片图片Chh28资讯网——每日最新资讯28at.com

但是重试三次后,队列里面的消息被踢出了:Chh28资讯网——每日最新资讯28at.com

图片图片Chh28资讯网——每日最新资讯28at.com

二、失败消息处理策略

    在开启重试模式后,重试次数耗尽,如果消息依然失败,则需要有MessageRecoverer接口来处理,它包含三种不同的实现:Chh28资讯网——每日最新资讯28at.com

     1、RejectAndDontRequeueRecoverer:重试耗尽后,直接reject,丢弃消息。默认就是这种方式。Chh28资讯网——每日最新资讯28at.com

    2、ImmediateRequeueMessageRecoverer:重试耗尽后,返回nack,消息重新入队(不建议采用:会出现死循环)。Chh28资讯网——每日最新资讯28at.com

     3、RepublishMessageRecoverer:重试耗尽后,将失败消息投递到指定的交换机。(推荐使用)Chh28资讯网——每日最新资讯28at.com

图片图片Chh28资讯网——每日最新资讯28at.com

三、实现方式

3.1、定义接收失败消息的交换机、队列及其绑定关系:Chh28资讯网——每日最新资讯28at.com

/**     * 功能描述:定义接收错误消费的日志     * @MethodName: receiveErrorMessage     * @MethodParam: [message]     * @Return: void     * @Author: yyalin     * @CreateDate: 2023/11/15 9:55     */    @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "errorQueue"),            exchange = @Exchange(name = "errorExchange", type = ExchangeTypes.DIRECT, ignoreDeclarationExceptions = "true"),            key = "errorRouting"    ))    public void receiveErrorMessage(String message) {        log.info("消费者收到发送错误的消息: " + message);    }

3.2、定义RepublishMessageRecoverer:

/** * @Description: TODO:定义错误消息接收 * @Author: yyalin * @CreateDate: 2023/11/15 9:58 * @Version: V1.0 */@Configuration@Slf4jpublic class ErrorConfig {    @Bean    public MessageRecoverer messageRecoverer(RabbitTemplate rabbitTemplate){        log.debug("加载RepublishMessageRecoverer");        return new RepublishMessageRecoverer(rabbitTemplate,"errorExchange","errorRouting");    }}

Chh28资讯网——每日最新资讯28at.com

3.3、测试结果:

图片图片Chh28资讯网——每日最新资讯28at.com

3.4、总结

消费者如何保证消息一定被消费?Chh28资讯网——每日最新资讯28at.com

  •     开启消费者确认机制为auto,由spring确认消息处理成功后返回ack,异常时返回nack。如果一直处理异常会一直重试。
  •     开启消费者失败重试机制,并设置MessageRecoverer,多次重试失败后将消息投递到异常交换机,交由人工处理。

本文链接:http://www.28at.com/showinfo-26-34653-0.htmlRabbitMQ高级之失败重试机制(含源码)

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 双向绑定与单向数据流之争,Solid会取代React吗

下一篇: 新一代WebFlux框架核心技术Reactor响应式编程基本用法

标签:
  • 热门焦点
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • 十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • 一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • 阿里瓴羊One推出背后,零售企业迎数字化新解

    作者:刘旷近年来随着数字经济的高速发展,各式各样的SaaS应用服务更是层出不穷,但本质上SaaS大多局限于单一业务流层面,对用户核心关切的增长问题等则没有提供更好的解法。在Saa
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就“胡锡进炒股是否知道认真报道”展开讨论。有
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • OPPO K11样张首曝:千元机影像“卷”得真不错!

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
  • onebot M24巧系列一体机采用轻薄机身设计,现已在各平台开售

    onebot M24 巧系列一体机目前已在线上线下各平台同步开售。onebot M24 巧系列采用一体化轻薄机身设计,最薄处为 10.15mm,拥有宝石红、午夜蓝、石墨绿、雅致
Top