我们的应用程序是存储用户在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);
    }
}