首页 > 解决方案 > RestTemplate 线程和多个用户

问题描述

我想在休息呼叫中将内容返回给用户,并且我想向跟踪服务器发送有关该内容请求的休息呼叫。如果跟踪服务器因太多响应而不堪重负,我不在乎它是否失败。我希望它快速超时,而不是阻止主要内容请求。为此,我创建了以下内容:

@Configuration
@EnableAsync
public class AsyncConfiguration {

    @Bean (name = "taskExecutor")
    public Executor taskExecutor() {
        log.info("Creating Async Task Executor");
        final ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setMaxPoolSize(2);//higher in prod
        executor.setQueueCapacity(2);//higher in prod
        executor.initialize();
        executor.setThreadNamePrefix("AyncThread-");
        return executor;
    }
}

...

@Async
public void trackSearch(TrackingRequest request) {
    try {
        restTemplate.postForLocation(activityUri, request);
    }
    catch (Exception e) {
        log.info("Exception in tracking activity: " + e.getMessage());
    }
}

所以,得到主要内容后,我trackSearch在上面调用。我不在乎它是否像我说的那样失败。但是当我在 JMeter 中测试这段代码时,我似乎无法“击败”队列大小。我所期待的是,如果有太多用户到达同一个端点,队列就会填满,它会停止尝试调用 trackSearch 并因此停止调用 restTemplate 。现在,没有一个调用失败。

我显然在这里误解了一些东西,所以如果有人能阐明我做错了什么,我将不胜感激。

标签: javaspringmultithreadingresttemplate

解决方案


推荐阅读