Retry
O java-restify oferece suporte para retry de requisições, síncronas ou assíncronas.
Por padrão, o suporte para retry é desabilitado, e deve ser explicitamente habilitado.
MyApi myApi = new RestifyProxyBuilder()
.retry()
.enabled()
.target(MyApi.class)
.build();Configuração
As configurações podem ser realizadas no próprio builder, e serão aplicadas para todos os métodos da interface:
MyApi myApi = new RestifyProxyBuilder()
.retry()
.enabled()
.configure()
.attempts(3) // número de tentativas (padrão: 1 (sem retry))
.timeout(Duration.ofMillis(10000)) // timeout máximo para as tentativas, pode ser informado também em milisegundos (opcional)
.backOff() // configuração de backoff
.delay(Duration.ofMillis(2000)) // período entre cada tentiva, pode ser informado também em milisegundos (padrão é 1000 milisegundos, aplicável apenas se attempts > 1)
.multiplier(1.5) // fator de multiplicação de tempo entre cada tentativa (padrão é 1, sem efeito prático)
.and()
.when(IOException.class)
.when(HttpStatusCode.INTERNAL_SERVER_ERROR, HttpStatusCode.BAD_GATEWAY)
.target(MyApi.class)
.build();Outra configuração necessária é o tipo de situação onde o retry deve ser executado. Novamente, o comportamento padrão é não aplicar nenhum tipo de retentativa, a não ser para os cenários explicitamente configurados:
É possível configurar vários cenários de erro usando do método when, quantos forem necessários. Existem outras sobrecargas que permitem ajustes ainda mais finos:
@Retry
Também é possível aplicar configurações mais específicas no nível do método, usando a anotação @Retry. Essa anotação tem parâmetros equivalentes às configurações disponíveis no RestifyProxyBuilder.
Essa anotação só é lida e processada se o retry for habilitado, conforme demonstrado acima.
Se a anotação @Retry estiver presente no topo da interface, a configuração será aplicada a todos os métodos.
Requisiçoes assíncronas
Todas as configurações demonstradas acima também se aplicam para requições assíncronas. A implementação padrão utiliza um ScheduledExecutorService, criado com uma configuração single-thread.
Caso essa configuração não atenda as necessidades da sua aplicação, é bastante simples configurar um novo ScheduledExecutorService:
Last updated
Was this helpful?