Я использую Акку с Java и Spring.И моя главная цель - уведомить другое приложение в асинхронном режиме.Но иногда это другое приложение не уведомляется.Итак, я реализовал супервизор, чтобы использовать повторные попытки.Но когда я получаю Исключение, в частности InternalServerErrorException, мой супервизор не делает еще одну попытку.Кажется, что проблема связана с RestTemplate и вашей обработкой исключений.Ниже следует мой код:
@Scope(SCOPE_PROTOTYPE)
public class NotificacaoSupervisor extends AbstractActor {
private static final int RETRIES = 5;
private OneForOneStrategy ONE_FOR_ONE_STRATEGY = new OneForOneStrategy(
RETRIES,
Duration.create("5 minutes"),
true,
DeciderBuilder.match(NotificacaoException.class, ex -> SupervisorStrategy.restart())
.build());
@Inject @Qualifier("notifyActor")
private ActorRef notifyActor;
@Override
public Receive createReceive() {
return receiveBuilder()
.matchAny(any -> notifyActor.forward(any, getContext()))
.build();
}
@Override
public SupervisorStrategy supervisorStrategy() {
return ONE_FOR_ONE_STRATEGY;
}
}
Блок, который отправляет уведомление
try{
if(content.isPresent()) {
this.logInfo(content.get());
HttpEntity<String> entity = new HttpEntity<>(content.get(), headers);
String urlDeCallback = integracao.getUrlDeCallback();
URI uri = URI.create(urlDeCallback);
restTemplate.postForObject(uri, entity, Void.class);
}
} catch (Exception e) {
this.logError(new ErrorResponse(notificacao).toString(), e);
throw new NotificacaoException(e);
}