开发者社区 > 云原生 > Serverless > 正文

函数计算,请问一下 springBoot 的@Async 在线下跑能够执行,打包到云函数后不执行 是

函数计算,请问一下 springBoot 的@Async 在线下跑能够执行,打包到云函数后不执行 是什么原因;

展开
收起
绿子直子 2023-07-21 14:29:14 66 0
3 条回答
写回答
取消 提交回答
  • 在函数计算中,使用 Spring Boot 的 @Async 注解时会有一些特殊的考虑和限制。

    1. 线程池配置:@Async 注解使用了一个线程池来执行异步方法。在本地运行时,默认情况下 Spring Boot 使用的是 Tomcat 的线程池(TomcatThreadPool),但在函数计算环境中,由于无法自定义线程池配置,所以默认的线程池可能不适合函数计算的场景。

    2. 函数计算的执行时间限制:函数计算有一个最长执行时间限制,超过该限制函数计算将强制终止。如果使用 @Async 注解启动的异步任务在函数计算的执行时间范围内无法完成,那么它可能被中止,导致异步任务无法执行完毕。

    3. 异步任务的返回值:在函数计算中,异步任务的返回值对于调用者来说并没有意义,因为函数计算是无状态的,无法等待异步任务的完成并获取其结果。

    因此,将 Spring Boot 项目打包成云函数后,使用 @Async 注解的异步任务可能无法按预期执行。建议您在函数计算环境中重新评估和设计异步任务的机制,考虑到函数计算的特点和限制进行相应的调整。

    您可以尝试使用函数计算提供的异步调用方式,如消息队列、定时触发器等,来实现异步任务的处理。

    2023-07-23 21:52:58
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    在函数计算中运行Spring Boot应用程序时,@Async注解可能无法正常工作,这可能是因为Spring Boot应用程序在函数计算环境中的运行方式与本地环境不同,导致@Async注解无法正确地触发异步执行。

    具体来说,函数计算中的Java应用程序是在容器中运行的,并且每个请求都会创建一个新的容器实例来处理请求。这意味着每个请求的处理都是独立的,并且在请求结束后容器实例会被销毁。因此,如果您使用@Async注解来触发异步执行,可能会出现异步任务无法完成或无法正常工作的情况。

    为了解决这个问题,您可以考虑使用函数计算提供的异步触发器来触发异步执行。函数计算提供了多种异步触发器,例如消息队列、定时任务等,您可以选择适合您需求的触发器,并将异步任务作为触发器的处理逻辑来实现异步执行。这样可以确保异步任务在函数计算环境中正常工作,并且可以避免使用@Async注解时可能出现的问题。

    2023-07-22 09:00:23
    赞同 展开评论 打赏
  • 因为FC在请求结束后就会停止,异步的操作就进行不下去了

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-07-21 19:14:11
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • 相关电子书

    更多
    All in Serverless 阿里云核心产品全面升级 立即下载
    AIGC 浪潮之上,森马的 Serverless 实践之旅 立即下载
    极氪大数据 Serverless 应用实践 立即下载