我有一个带有 @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 会关闭实例吗?谁能解释一下发生了什么?
请解释是否有办法解决这个问题。
这确实是我所期望的。
如果可能的话,容器会保持运行状态以供将来调用。
但是,如果主线程不活动,您无法保证它会保持不变。
您可以使 Lambda 异步并使用面向消息的中间件(如 SQS)来生成多个任务。