Супервизор akka не работает правильно с RestTemplate - PullRequest
0 голосов
/ 27 сентября 2019

Я использую Акку с 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);
}
...