2017-11-08 1 views
2

ich spring-retry Modul mit folgenden RetryTemplate Konfiguration mit:Frühling Retry CompositeRetryPolicy funktioniert nicht

@EnableRetry 
@Configuration 
public class RetryConfig { 

    @Bean 
    public RetryTemplate retryTemplate() { 
     final FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy(); 
     backOffPolicy.setBackOffPeriod(500); 

     final SimpleRetryPolicy attemptsPolicy = new SimpleRetryPolicy(); 
     attemptsPolicy.setMaxAttempts(2); 
     final TimeoutRetryPolicy timeoutPolicy = new TimeoutRetryPolicy(); 
     timeoutPolicy.setTimeout(2000); 
     final CompositeRetryPolicy retryPolicy = new CompositeRetryPolicy(); 
     retryPolicy.setPolicies(new RetryPolicy[] {timeoutPolicy, attemptsPolicy}); 

     final RetryTemplate template = new RetryTemplate(); 
     template.setBackOffPolicy(backOffPolicy); 
     template.setRetryPolicy(retryPolicy); 
     return template; 
    } 
} 

Aber die TimeoutRetryPolicy (verwendet in CompositeRetryPolicy Instanz) nicht offensichtlich funktioniert.

Ich injiziere RetryTemplate für den Verbrauch von SOAP-Diensten und in einigen Fällen dauert es mehr als 10 Sekunden zu reagieren. Allerdings glaube ich, dass es durch die Configs nicht mehr als 4 Sekunden dauern sollte (2 Sekunden Timeout * 2 Versuche). Vielen Dank im Voraus!

Antwort

0

Ich hatte das gleiche Problem und konnte leider nicht mit Feder-Wiederholung lösen. Daher habe ich meine eigene generische Klasse implementiert: RetryTemplate.java (gist link).

Seine Verwendung ist sehr einfach:

try { 
    final int attempts = 2; 
    final long timeout = 2000; 
    final String foo = new RetryTemplate<String>(attempts, timeout).execute(() -> { 
     // Your retryable logic here! 
     return "Lorem ipsum"; 
    }); 
} catch (RetryException retryExpectedError) { 
    // Your logic if the re-attempts is exceeded. 
    // Note: RetryException is a simple inheritance of RuntimeException. 
} 

Obwohl ich nicht die Kontrolle Backoff umgesetzt haben, wäre es trivial sein. Ich hoffe, es hilft!

+1

Funktioniert! Ich danke dir sehr! – RenanJPaula

Verwandte Themen