Spring Async不并行执行任务

时间:2019-02-22 15:36:10

标签: java spring-boot asynchronous

我正在尝试使用Apache HTTP Client和Spring的异步功能在目标上并行执行HTTP请求。

这是异步配置:

@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个节点,但是当我使用下一行中的forEach流语句发送要并行执行的100个节点时,我在 checkJunctionNode 的日志中看到在5-6中正在检查每个节点秒。 没有并行执行。

出了什么问题?

0 个答案:

没有答案