我们的应用程序是存储用户在SalesForce中输入的数据 . 我们正在使用Spring AMQP(RabbitMQ)来存储数据并运行应用程序,即使SalesForce无法访问(计划的停机时间或其他) .
因此,一旦SalesForce不可用,队列应该等待重试消息,直到它再次启动 . 这可能是使用CircuitBreakerRetryPolicy还是我必须实现自定义RetryPolicy?
目前我只有一个简单的重试策略,应该用一个复杂的策略替换,阻止重试,直到外部系统再次可达 .
@Bean
RetryOperationsInterceptor salesForceInterceptor() {
return RetryInterceptorBuilder.stateless()
.recoverer(new RejectAndDontRequeueRecoverer())
.retryPolicy(simpleRetryPolicy())
.build();
}
消息监听器:
@Override
public void onMessage(Message message) {
try {
.....
} catch (ResourceAccessException e) {
//TODO probablyy wrong exception
throw new AmqpTimeoutException("Salesforce can not be accessed, retry later");
} catch (Exception e) {
throw new AmqpRejectAndDontRequeueException("Fatal error with message to salesforce, do not retry", e);
}
}