按文档说的,配置了retryTimesWhenSendFailed,那消息发送失败的时候,会进行重试, DefaultMQProducerImpl的sendDefaultImpl方法中会根据这个配置计算重试次数。
但是在调用sendKernelImpl获取到SendResult后,判断发送模式,为同步模式时,而且sendResult.getSendStatus() != SendStatus.SEND_OK,我的理解应该要进行重试,但是代码还要判断是否重试另一个broker if (this.defaultMQProducer.isRetryAnotherBrokerWhenNotStoreOK()) { continue; } return sendResult; 这个配置默认为false,而且单broker的情况下也没有配置的意义(选择queue时)。相当于默认情况下,即便配置了重试次数, 也不会进行重试?请问这是设计原因还是代码缺陷?
原提问者GitHub用户xljnc
org.apache.rocketmq.client.impl.MQClientAPIImpl#processSendResponse 你可以看下这个方法,sendResult有值并且不为SendStatus.SEND_OK时,表面这组broker有问题,所以这里会选择判断。其它情况都是直接抛异常,不会走这段逻辑的
原回答者GitHub用户panzhi33
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。