Проблема с CompletableFuture
Всем привет, у меня приложение отправляет письмо на почту, иногда почтовый сервер зависает и ничего не отдает, и соответственно приложение на отправку тоже, лечится после рестарта приложения. Чтобы этого избежать,я решил воспользоваться таймаутом CompletableFuture, и отпускать метод, чтобы продолжать отправку. С многопоточностью не работал совсем, поэтому посмотрел в интернете.
Вот мой код
CompletableFuture<Void> future = CompletableFuture.runAsync(new Runnable() {
@Override
public void run() {
mailSender.send(message);
log.info("End post!");
}
});
try {
future.get(10, TimeUnit.SECONDS);
} catch (TimeoutException ex) {
log.info("GET TIMEOUT FROM POST SERVICE!");
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
Все работало хорошо неделю, в логах видно что использовался ForkJoinPool
INFO [ForkJoinPool.commonPool-worker-5]: End post!
Но сегодня, почему-то приложения начало постоянно отваливаться на таймауте. Не понимал что не так, начал писать даже сетевикам.
Потом решил убрать свою фичу, и вооля работает, опять включил, снова по таймауту отваливается.
После решил добавить Executor
ExecutorService executor = Executors.newSingleThreadExecutor();
и передавать его в runAsync.
Все заработало. сейчас тянет из пула [pool-507-thread-1]: End post!
В логе кстати число увеличивается постоянно с каждым сообщением 508, 509 и т.д.
Вопрос, что могло почти не так? Может я что-то сделал криво, помогите плиз. Вопрос просто суперсрочный(((
Вот первая часть вопроса, тут описан как раз класс выше Зависает JavaMailSender