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

在阿里函数计算中,为什么新事件依然可以触发函数执行?

在阿里函数计算中,1. 主账号:1962523520169049

2.    region:cn-shanghai
3.    serviceName:dev_nebula
4.    functionName:yida-sync
5.    requestid:多个请求Kafka 触发器配置了退避重试和禁止容错策略,在已有多个事件执行出错(执行 1 次+重试 3 次)的情况下,为什么新事件依然可以触发函数执行?如何理解”当异常发生并超过重试策略配置时会阻塞执行“中的”阻塞执行“?

展开
收起
小小鹿鹿鹿 2023-10-30 21:54:11 46 0
4 条回答
写回答
取消 提交回答
  • 您说的触发器的重试指的是事件推送失败时的
    多个事件执行出错应该指的是函数代码执行出错,这个是在函数异步配置中设置的重试次数,每次的请求不影响的
    https://help.aliyun.com/zh/fc/user-guide/retry-policy?spm=a2c4g.11186623.0.0.79a171c2DnY4dL。此回答来自钉群阿里函数计算官网客户。

    2023-10-31 22:19:42
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在阿里云函数计算 (Function Compute, FC) 中,事件触发器是一种触发器,可以根据配置的不同事件源来触发函数执行。当事件源产生事件时,FC 将根据配置的触发器设置和回调函数,调用相应函数来进行事件处理。
    如果新事件仍然能够触发函数执行,可能的原因有以下几种:

    1. 配置了重复触发:如果您在 FC 控制台中启用了重复触发功能,FC 会多次调用函数,直到达到最大次数为止。
    2. 事件源持续发送事件:如果您在事件源中持续发送事件,则事件会不断地触发函数执行。
    3. 函数未终止:在函数执行过程中,如果您没有主动停止函数运行,则事件源将继续发送事件,函数也会继续执行。
    2023-10-31 13:37:23
    赞同 展开评论 打赏
  • 在阿里云函数计算中,Kafka触发器的重试策略是为了保证函数的稳定性和可靠性。当函数执行出错时,Kafka触发器会自动进行重试,直到达到最大重试次数。

    你提到的"当异常发生并超过重试策略配置时会阻塞执行",这里的"阻塞执行"并不是指函数执行的阻塞,而是指新的事件不会被立即触发。当有新的事件到达时,Kafka触发器会先检查当前的执行状态。如果当前正在执行的事件还没有完成,那么新的事件就会被阻塞,等待当前的事件完成后再触发函数执行。

    在你的情况下,如果你在入口函数中返回的是5xx错误,那么Kafka触发器会认为这是函数执行出错,从而触发重试。如果你希望在错误情况下禁止重试,你可以考虑在函数代码中捕获并处理这些错误,或者直接返回4xx或5xx错误。

    Kafka触发器的重试策略是为了保证函数的稳定性和可靠性,但是它并不能解决函数代码本身的问题。如果你希望在错误情况下禁止重试,你需要在函数代码中进行处理。

    2023-10-31 10:28:57
    赞同 展开评论 打赏
  • 在阿里云函数计算中,当异常发生并且超过了重试策略配置时,“阻塞执行”指的是不再继续执行新的请求,直到已经排队等待执行的任务全部执行完毕。换句话说,如果已有任务正在执行,并且出现了异常,函数计算会在尝试重试的同时阻止新的请求进入队列,避免新的请求堆积起来造成更大的问题。这称为“阻塞执行”,也叫做拒绝服务(Denial of Service)。至于您提到的新事件依然可以触发函数执行的情况,这可能是由于在新的事件到来时,已有任务还没有结束。当旧的任务仍在执行并且超过了重试策略配置时,新的任务就会被执行。如果这种情况频繁发生,建议检查触发器的配置,确保触发器设置合理,以免影响整体性能。还需要关注现有任务的状态,并及时解决可能出现的问题。

    2023-10-31 10:25:35
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • 热门讨论

    热门文章

    相关电子书

    更多
    Hologres Serverless之路:揭秘弹性计算组 立即下载
    Serverless开发平台: 让研发效能再提升 立即下载
    Serverless 引领云上研发新范式 立即下载