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

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

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

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
3 条回复 A 作者 M 管理员
  1. 在阿里云函数计算 (Function Compute, FC) 中,事件触发器是一种触发器,可以根据配置的不同事件源来触发函数执行。当事件源产生事件时,FC 将根据配置的触发器设置和回调函数,调用相应函数来进行事件处理。
    如果新事件仍然能够触发函数执行,可能的原因有以下几种:

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

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

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

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

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