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

使用spring写了一个功能(把请求的数据插入到数据库中)一个方法是同步的,一个方法是异步的,我发现

使用spring写了一个功能(把请求的数据插入到数据库中)一个方法是同步的,一个方法是异步的,我发现异步方法并不会被执行(数据不会插入到数据库中),当同步方法被触发,同步请求的数据和异步请求的数据都会被插入到数据库,本地测试没有这种情况,这个是什么原因呀?

展开
收起
芬奇福贵 2023-10-10 16:16:09 45 0
1 条回答
写回答
取消 提交回答
  • 函数计算是按照请求计费的,如果请求响应了,实例就会被冻结。子线程中的代码也就无法执行了。您有如下三种解决方法:  

    (推荐):您可以将需要进行异步处理的逻辑,单独作为一个函数,然后使用函数的异步调用功能,在原函数中使用 FC 的 SDK,通过异步调用的方式调用新函数,从而达到异步执行的效果。例如:您的需求是同步请求完成用户注册,然后异步给用户发送确认邮件。那么您需要改造您的函数,将发送邮件的逻辑放到一个新的函数里,然后在原有函数完成用户注册之后,在代码中使用 FC SDK 异步调用这个发送邮件的新函数。参考示例
    您可以在子线程中完成请求响应,从而避免函数被冻结。
    使用预留实例,并关闭预留实例的闲置计费功能。这样实例就不会被冻结了,不过费用较高。

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

    2023-10-10 21:19:47
    赞同 展开评论 打赏

快速交付实现商业价值。

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载