可以看到这个方法的核心就是重试,且对不同的异常,有不同的重试策略。
也有一些异常情况是不需要再次重试的
每次调用重试方法 重试次数+1
且重试的最大次数也是有设置的 timesTotal
总结这个方法,就是异步发送,如果有异常
调用
onExceptionImpl(retryBrokerName, msg, timeoutMillis, request, sendCallback, topicPublishInfo, instance, timesTotal, curTimes, e1,
context, false, producer);
而这个方法内部其实是对 异步发送 的调用,这两个方法其实是形成了递归
递归结束的条件 就是要么捕获了不需要再重试的异常
要么重试次数达到了最大次数
看到这儿有点迷失在代码的海洋了
再回顾下namesrv和broker各自的角色和职责吧