Я создаю асинхронное решение на основе API с использованием Spring Boot, в котором я использую Executor Service для многопоточности.Код будет работать на нескольких серверах.Так что для логики отработки отказа сервера я планировал добавить идентификатор процесса вместе с IP-адресом сервера в базе данных Postgres.У меня будет настройка задания crontab, которая будет проверять работоспособность всех экземпляров, и в случае сбоя экземпляра я собираю все идентификаторы процесса, связанные с этим IP-адресом сервера (из БД), и повторно запускаю эти задания на другом сервере.,
Предположим, у меня фиксированный пул потоков из 15 потоков, и я получаю 30 потоков.15 будет запущен, а остальные 15 будут поставлены в очередь в Службе Исполнителя.И если сервер сейчас выходит из строя, по крайней мере, у меня были бы подробности о тех, которые работают, но я бы потерял идентификаторы процессов тех, которые поставлены в очередь.Итак, моя задача - сохранить идентификаторы процессов вместе с ips сервера, как только мы добавим их в службу executor, не дожидаясь запуска процесса.Есть ли какой-нибудь механизм для этого?
Я не очень старался из-за логики переключения при отказе, поскольку я все еще планирую это сделать.Я написал код для помещения работы в службу executor, и она будет запускать задания на основе фиксированного размера пула потоков.
Это конфигурация, которую я настроил при загрузке Spring для службы executor.
@Configuration
@EnableAsync
public class AsyncConfig {
@Bean(name = "fixedThreadPool")
public ExecutorService fixedThreadPool() {
return Executors.newFixedThreadPool(15);
}
}
Это асинхронный метод, который вызывается из контроллера.
public void asyncMethodToCreateFile(String requestId) {
String currentIpAddress= 'some logic to get the ip';
writeStatusInDb(requestId,currentIpAddress)
System.out.println("In asyncMethodToCreateFile() method...");
service.writeToFile(requestId);
}
Здесь я хочу запустить метод writeStatusInDb (), как только он будет добавлен в службу executor без необходимости запуска обработки.Но он запускается только после запуска метода.
Существует ли какой-либо метод, который выполняется, как только задание отправляется в службу исполнителя?