Skip to content

Instantly share code, notes, and snippets.

@daniel-frank
Created October 4, 2017 18:33
Show Gist options
  • Save daniel-frank/19dfafbf3d53f4c4b1463107daac540c to your computer and use it in GitHub Desktop.
Save daniel-frank/19dfafbf3d53f4c4b1463107daac540c to your computer and use it in GitHub Desktop.
Retry on timeout in a long process gateway
@Configuration
public class TimeoutGatewayFlowConfig extends IntegrationFlowAdapter {
@Bean
@Override
protected IntegrationFlowDefinition<?> buildFlow() {
return this
.from(this.timeSource(), c -> c.poller(Pollers.fixedDelay(1, TimeUnit.MINUTES)))
.gateway(this.longProcessFlow(), c -> c
.replyTimeout(TimeUnit.SECONDS.toMillis(5))
.requiresReply(true)
.advice(this.retryInterceptor())
)
.handle(m -> System.out.printf("Result:%s%n", m.getPayload()));
}
MessageSource<LocalDateTime> timeSource() {
return () -> new GenericMessage<>(LocalDateTime.now());
}
IntegrationFlow longProcessFlow() {
return f -> f
.channel(MessageChannels.executor(Executors.newSingleThreadExecutor()))
.handle((p, h) -> {
Exceptions.unchecked(() -> TimeUnit.SECONDS.sleep(10));
return "Done!";
});
}
private RetryOperationsInterceptor retryInterceptor() {
RetryOperationsInterceptor interceptor = new RetryOperationsInterceptor();
interceptor.setRetryOperations(this.retryTemplate());
return interceptor;
}
private RetryTemplate retryTemplate() {
RetryTemplate retryTemplate = new RetryTemplate();
retryTemplate.setRetryPolicy(this.retryPolicy());
retryTemplate.setBackOffPolicy(this.backoffPolicy());
return retryTemplate;
}
private RetryPolicy retryPolicy() {
return new SimpleRetryPolicy(10, ImmutableMap.of(ReplyRequiredException.class, true), true);
}
private BackOffPolicy backoffPolicy() {
FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
backOffPolicy.setBackOffPeriod(TimeUnit.SECONDS.toMillis(5));
return backOffPolicy;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment