如何防止事件重复消费?配置的是http触发器,有时上游会重试发送请求导致FC重复执行同一逻辑,有没有个什么地方能跨实例缓存msgId来去重?走的同步调用。
那要自己搞了。或者用异步调用的任务模式,然后客户端主动设置一下 requestid,FC 就会帮忙去重了,一个requestid/任务id 运行成功再来的同一个requestid就会被丢弃了
此答案来自钉钉群“阿里函数计算官网客户"
针对你描述的场景,可以考虑利用阿里云的消息队列服务(MQ)来实现消息去重的功能。
首先,在上游向函数计算发送请求时,可以通过MQ发送消息,而不是直接发送请求。这样,当上游因为某个原因需要重试发送请求时,可以避免消息重复发送。
在函数计算的HTTP触发器中,可以通过自定义响应头将消息的唯一标识(如消息ID)返回给上游。例如,可以在响应头中添加类似于“X-FC-MsgId”这样的自定义头,将消息ID返回给上游。上游需要在发送下一条消息时,将上一条消息的ID作为请求头中的“X-FC-LastMsgId”参数值发送给函数计算。函数计算可以在存储服务(如Redis或者Memcached)中缓存已经处理的消息ID,每次处理消息时会先检查是否已经处理过该消息ID。如果已经处理,则直接忽略该消息,不再执行后续逻辑。
通过这种方式实现去重功能,可以避免上游重试请求导致函数计算执行同一逻辑的问题,同时可以跨实例缓存消息ID,保证在多个实例中去重效果的一致性。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。