RocketMQ分析 - メッセージ再試行メカニズムの生産終了

1によりproducer.setRetryTimesWhenSendFailed(count)、故障にデフォルト値を再試行時刻を設定するためにプロデューサによって送信されたメッセージの数2回試行、すなわち失敗した後、メッセージは、合計3回送信しました

# com.alibaba.rocketmq.client.producer.DefaultMQProducer
private int retryTimesWhenSendFailed = 2;

2.プロデューサリトライメカニズムによって送信されたメッセージ

ソースコードを貼り付け、クライアントのバージョン番号は次のとおりです。3.2.6

# com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl#sendDefaultImpl
int timesTotal = 1 + this.defaultMQProducer.getRetryTimesWhenSendFailed();
int times = 0;
String[] brokersSent = new String[timesTotal];
for (; times < timesTotal && (endTimestamp - beginTimestamp) < maxTimeout; times++) {
    String lastBrokerName = null == mq ? null : mq.getBrokerName();
    MessageQueue tmpmq = topicPublishInfo.selectOneMessageQueue(lastBrokerName);
    if (tmpmq != null) {
        mq = tmpmq;
        brokersSent[times] = mq.getBrokerName();
        try {
            sendResult = this.sendKernelImpl(msg, mq, communicationMode, sendCallback, timeout);
            endTimestamp = System.currentTimeMillis();
            switch (communicationMode) {
            case ASYNC:
                return null;
            case ONEWAY:
                return null;
            case SYNC:
                if (sendResult.getSendStatus() != SendStatus.SEND_OK) {
                    if (this.defaultMQProducer.isRetryAnotherBrokerWhenNotStoreOK()) {
                        continue;
                    }
                }

                return sendResult;
            default:
                break;
            }
        }
        catch (Exception e) {
            endTimestamp = System.currentTimeMillis();
            continue;
        }
    }
    else {
        break;
    }
} // end of

おすすめ

転載: www.cnblogs.com/HeCG95/p/11761154.html