2015-05-27 2 views
4

Я использую библиотеку Spring-Cloud-netflix.Можем ли мы использовать Spring-cloud-netflix и Hystrix для повторных попыток exectuion

Интересно, есть ли способ, чтобы этот код и добавить его настроить вместо выполнения метода резервного сразу повторить попытку выполнить его N раз, а в случае N раз, чем выполнить метод резервного:

@HystrixCommand(fallbackMethod = "defaultInvokcation") 
    public String getRemoteBro(String name) { 
     return(executeRemoteService(name)); 
    } 

    private String defaultInvokcation(String name) { 
    return "something"; 
} 

Thanks, ray.

+0

Я не думаю, что это работа от hystrix. Это скорее ваш 'executeRemoteService', который отвечает за поведение удаленного запроса. Расширьте этот метод до "loop {success? Return: try again} throw RequestAmountExceededException" – meistermeier

+0

Ah. отличная идея. могли бы продемонстрировать это с ответом? Я буду отмечать это как ответ. Спасибо. – rayman

ответ

2

С моей comment:

Handle это поведение в вашем коде. Гиштрица не знает о вашей «специальной» бизнес-логике. В качестве примера

private final static int MAX_RETRIES = 5; 

@HystrixCommand(fallbackMethod = "defaultInvokcation") 
public String getRemoteBro(String name) { 
    return(executeRemoteService(name)); 
} 

private String executeRemoteService(String serviceName) { 
    for (int i = 0; i < MAX_RETRIES; i++) { 
     try { 
      return reallyExecuteRemoteService(serviceName); 
     } catch (ServiceException se) { 
      // handle or log execption 
     } 
    } 
    throw new RuntimeException("bam"); 
} 

Не знаю, если вы предпочитаете использовать исключение внутри цикла;) Вы также можете обернуть ваш ответ от reallyExecuteRemoteService в какой-то ServiceReturnMessage с кодом состояния.

+0

Ahh Я думал, что смогу справиться с этим в обработке исключений Hystrix. не мое исключение службы – rayman

+0

Как я пытался выразить: Hystrix проверяет выполнение вашей службы, и если что-то не удается, он просто терпит неудачу с точки зрения hystrix. Таким образом, это должна быть логика в вашей вызываемой службе. Для hystrix будет очень сложно определить, мертв ли ​​сервис (удаленная сторона), или его просто нужно попросить снова (просто мысль: возможно, на основе типа исключения из вашего вызова). – meistermeier

+0

Хорошо, что было бы неплохо, если бы у Hystrix мог быть механизм повтора непосредственно перед выполнением метода по умолчанию (неважно, какова была причина сбоя) – rayman

Смежные вопросы