/// <summary> /// 重试,(有等待时间,有重试次数限制) /// </summary> /// <param name="response"></param> /// <returns></returns> public static MessageCarrier WaitAndRetry(this MessageResponse response, Func <int, int> retryAttempt, int maxRetries) { var @event = MessageCarrier.Clone(response); var numberOfRetries = response.GetNumberOfRetries(); var TTL = retryAttempt(numberOfRetries); //当前重试次数小于最大重试次数 if (numberOfRetries < maxRetries) { @event.WithWait(TTL); @event.WithRetry(maxRetries, ++numberOfRetries); } else { @event.WithNoRetry(); } return(@event); }