Spring Async не выполняет задачи параллельно - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь выполнить HTTP-запросы на целевом объекте параллельно, используя Apache HTTP Client и асинхронную функцию Spring.

Вот конфигурация Async:

@Configuration
@EnableAsync
public class BackOfficeConfig {
    @Bean(name = "junctionNodeTaskExecutor")
    public Executor junctionNodeTaskExecutor() {
        int nThreads = Runtime.getRuntime().availableProcessors() * 100;
        return new ConcurrentTaskExecutor(Executors.newFixedThreadPool(nThreads));
    }
}

Сейчас в службе,У меня есть следующие методы:

@Async("junctionNodeTaskExecutor")  // Async methods have to be public
public void checkJunctionNode(JunctionNode junctionNode) {
    JunctionNodeChecker junctionNodeChecker = new JunctionNodeChecker(junctionNode);
    Instant now = Instant.now();

    // Details dealing with sending the HTTP request
}

private void collectJunctionNodes() {
    logger.info("Inside add Junction Node");
    List<JunctionNode> junctionNodeList = new ArrayList<>();
    int count = 0;
    while (count < 100) {
        JunctionNode junctionNode = (JunctionNode) rabbitMQService.getFromQueue(RabbitMQConfig.QUEUE_CHECK_JUNCTION_NODE);
        if (junctionNode == null)
            break;
        junctionNodeList.add(junctionNode);
        count++;
    }
    logger.info("Collected JunctionNode count: {} for checking", count);
    junctionNodeList.forEach(this::checkJunctionNode);
}

Метод collectionJunctionNodes, собирать объекты узлов из очереди rabbitMQ 100 одновременно.В журналах я вижу следующее сообщение:

Собранный счетчик JunctionNode: 100 для проверки

Это, как и ожидалось.Теперь у меня есть 100 узлов, но когда я отправляю эти 100 для параллельного выполнения с помощью оператора потока forEach в строке ниже, я вижу в журналах checkJunctionNode , что каждый узел проверяется через 5-6 секунд,Нет параллельного выполнения.

Что не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...