在 AWS Lambda 上运行 Spring 启动异步

问题描述 投票:0回答:1

我有一个带有 @async 注释方法的 Spring Boot 应用程序,在 AWS lambda 上运行。这是我使用的配置。

@Configuration
@EnableAsync
@Slf4j
public class AsyncConfig implements AsyncConfigurer {
    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(2);
        executor.setMaxPoolSize(5);
        executor.setQueueCapacity(50);
        executor.setThreadNamePrefix("Async Tasks-");
        executor.initialize();
        return executor;
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return (ex, method, params) -> {
            log.error("Exception message in async task - {}", ex.getMessage());
            log.error("Method name - {}", method.getName());
            for (Object param : params) {
                log.error("Parameter value - {}" , param);
            }
        };
    }
}

我在监听外部回调时执行异步任务,以便它们可以异步运行。

我可以看到任务正在开始,但有时,它们没有完成。

是因为当主线程完成时,AWS lambda 会关闭实例吗?谁能解释一下发生了什么?

请解释是否有办法解决这个问题。

spring-boot asynchronous aws-lambda
1个回答
0
投票

这确实是我所期望的。
如果可能的话,容器会保持运行状态以供将来调用。 但是,如果主线程不活动,您无法保证它会保持不变。

您可以使 Lambda 异步并使用面向消息的中间件(如 SQS)来生成多个任务。

© www.soinside.com 2019 - 2024. All rights reserved.