为什么RocketMQ DefaultMQProcuderImpl调用updateFaultItem连消息发送成功

Why RocketMQ DefaultMQProcuderImpl calls updateFaultItem even message is sent successfully

sendResult = this.sendKernelImpl(msg, mq, communicationMode, sendCallback, topicPublishInfo, timeout - costTime);
endTimestamp = System.currentTimeMillis();
this.updateFaultItem(mq.getBrokerName(), endTimestamp - beginTimestampPrev, false);

当发送消息并且没有发生异常时,方法updateFaultItem()将是executed.But它是一个可用的代理,为什么将它添加到faultItemTable???

因为成功并不意味着足够健康,这意味着如果您有 2 个代理并且您向它们发送大量消息并且消息都已成功发送,但是,一个代理很慢所以延迟很高。对于这种高延迟的broker,我们应该将其更新为fault item并隔离一段时间,以防bad broker恶化,客户端才会有良好的发送体验。

但 sendLatencyFaultEnable 默认设置为 false,您可以通过调用 setSendLatencyFaultEnable(true)

来启用它