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

函数计算,使用的是自定义运行java springboot htto请求触发器,客户端超时时间较短,

函数计算,使用的是自定义运行java springboot htto请求触发器,客户端超时时间较短,取消了请求。如果设置异步调用?

展开
收起
云原生那些事 2023-07-25 16:22:42 56 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    有以下几种方法实现函数计算异步处理:

    回调函数
    客户端发送http请求后,函数作出响应。然后函数异步地进行后续处理。

    处理完成后,通过回调函数通知客户端。

    MQ异步
    客户端发送http请求后,函数在响应后,将任务放入消息队列。

    然后函数监听消息队列,进行异步处理。

    定时触发器
    客户端请求函数后,函数仅保存任务信息。

    之后使用定时触发器,进行异步的周期性处理。

    以上几种方法的优缺点:

    回调函数:异步性最高,但需要两次函数执行开销稍高

    MQ异步:消息丢失风险,但函数运行更简单

    定时触发器:周期性能力强,但是延迟稍高

    2023-07-28 23:19:39
    赞同 展开评论 打赏
  • 如果客户端超时时间较短并且取消了请求,你可以考虑使用异步调用来解决这个问题。异步调用允许客户端发送请求后立即返回,并在后台进行处理。下面是一种使用异步调用的方法:

    1. 在函数计算中,创建一个异步触发器,用于接收HTTP请求。
    2. 当接收到HTTP请求时,立即返回一个回复,告知客户端请求已经接收到。
    3. 在后台使用异步任务或消息队列等机制来处理实际的业务逻辑。
    4. 处理完成后,将结果返回给客户端。

    使用异步调用的好处是能够立即返回给客户端,避免客户端超时取消请求。同时,通过在后台进行处理,可以提高系统的吞吐量和并发性能。

    在Java Spring Boot中,你可以使用@Async注解来定义异步方法。例如,你可以将HTTP请求的处理逻辑放在一个带有@Async注解的方法中,使其变为异步执行。下面是一个简单的示例代码:

    @RestController
    public class MyController {
    
        @Autowired
        private MyService myService;
    
        @PostMapping("/process")
        public String processRequest() {
            // 返回立即响应给客户端
            return "Request received";
    
            // 调用异步方法处理业务逻辑
            myService.processInBackground();
        }
    }
    
    @Service
    public class MyService {
    
        @Async
        public void processInBackground() {
            // 执行具体的业务逻辑
            // ...
    
            // 处理完成后,返回结果给客户端
        }
    }
    

    需要注意的是,为了使@Async注解生效,还需要在Spring Boot的配置类上添加@EnableAsync注解。

    2023-07-27 23:08:14
    赞同 展开评论 打赏
  • 回答1.png

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

    2023-07-26 09:35:09
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • 相关电子书

    更多
    Serverless开发平台: 让研发效能再提升 立即下载
    Serverless 引领云上研发新范式 立即下载
    All in Serverless 阿里云核心产品全面升级 立即下载