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

如何防止事件重复消费?配置的是http触发器,有时上游会重试发送请求导致FC重复执行同一逻辑,有没有

如何防止事件重复消费?配置的是http触发器,有时上游会重试发送请求导致FC重复执行同一逻辑,有没有个什么地方能跨实例缓存msgId来去重?走的同步调用。

展开
收起
绿子直子 2023-03-14 10:04:15 442 0
2 条回答
写回答
取消 提交回答
  • 那要自己搞了。或者用异步调用的任务模式,然后客户端主动设置一下 requestid,FC 就会帮忙去重了,一个requestid/任务id 运行成功再来的同一个requestid就会被丢弃了

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

    2023-03-14 17:20:01
    赞同 展开评论 打赏
  • 月移花影,暗香浮动

    针对你描述的场景,可以考虑利用阿里云的消息队列服务(MQ)来实现消息去重的功能。

    首先,在上游向函数计算发送请求时,可以通过MQ发送消息,而不是直接发送请求。这样,当上游因为某个原因需要重试发送请求时,可以避免消息重复发送。

    在函数计算的HTTP触发器中,可以通过自定义响应头将消息的唯一标识(如消息ID)返回给上游。例如,可以在响应头中添加类似于“X-FC-MsgId”这样的自定义头,将消息ID返回给上游。上游需要在发送下一条消息时,将上一条消息的ID作为请求头中的“X-FC-LastMsgId”参数值发送给函数计算。函数计算可以在存储服务(如Redis或者Memcached)中缓存已经处理的消息ID,每次处理消息时会先检查是否已经处理过该消息ID。如果已经处理,则直接忽略该消息,不再执行后续逻辑。

    通过这种方式实现去重功能,可以避免上游重试请求导致函数计算执行同一逻辑的问题,同时可以跨实例缓存消息ID,保证在多个实例中去重效果的一致性。

    2023-03-14 10:16:51
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • 相关电子书

    更多
    Serverless 引领云上研发新范式 立即下载
    阿里巴巴HTTP 2.0实践及无线通信协议的演进之路 立即下载
    CDN助力企业网站进入HTTPS时代 立即下载