Java 为什么RocketMQ DefaultMQProcuderImpl在成功发送消息的情况下调用updateFaultItem

Java 为什么RocketMQ DefaultMQProcuderImpl在成功发送消息的情况下调用updateFaultItem,java,rocketmq,Java,Rocketmq,当发送消息且未发生异常时,将执行方法updateFaultItem()。但它是一个可用的代理,为什么要将其添加到faultItemTable?,因为成功并不意味着足够健康,这意味着如果您有两个代理,并且您向它们发送了大量消息,并且消息都已成功发送,然而,一个代理的速度很慢,所以延迟很高。对于这个高延迟代理,我们应该将其更新为fault item并将其隔离一段时间,如果坏代理变得更糟,那么客户端将享受良好的发送体验 但是sendLatencyFaultEnable默认设置为false,您可以通过调

当发送消息且未发生异常时,将执行方法
updateFaultItem()
。但它是一个可用的代理,为什么要将其添加到
faultItemTable

,因为成功并不意味着足够健康,这意味着如果您有两个代理,并且您向它们发送了大量消息,并且消息都已成功发送,然而,一个代理的速度很慢,所以延迟很高。对于这个高延迟代理,我们应该将其更新为fault item并将其隔离一段时间,如果坏代理变得更糟,那么客户端将享受良好的发送体验

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

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