开发者社区 > 云原生 > 正文

4.8.0版本的RocketMQ重试机制retryTimesWhenSendFailed和retry

按文档说的,配置了retryTimesWhenSendFailed,那消息发送失败的时候,会进行重试, DefaultMQProducerImpl的sendDefaultImpl方法中会根据这个配置计算重试次数。

但是在调用sendKernelImpl获取到SendResult后,判断发送模式,为同步模式时,而且sendResult.getSendStatus() != SendStatus.SEND_OK,我的理解应该要进行重试,但是代码还要判断是否重试另一个broker if (this.defaultMQProducer.isRetryAnotherBrokerWhenNotStoreOK()) { continue; } return sendResult; 这个配置默认为false,而且单broker的情况下也没有配置的意义(选择queue时)。相当于默认情况下,即便配置了重试次数, 也不会进行重试?请问这是设计原因还是代码缺陷?

原提问者GitHub用户xljnc

展开
收起
芬奇福贵 2023-05-26 11:00:13 114 0
1 条回答
写回答
取消 提交回答
  • org.apache.rocketmq.client.impl.MQClientAPIImpl#processSendResponse 你可以看下这个方法,sendResult有值并且不为SendStatus.SEND_OK时,表面这组broker有问题,所以这里会选择判断。其它情况都是直接抛异常,不会走这段逻辑的

    原回答者GitHub用户panzhi33

    2023-05-26 17:22:21
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关产品

  • 云消息队列 MQ
  • 相关电子书

    更多
    RocketMQ Client-GO 介绍 立即下载
    RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载