钉钉审批流回调瞬间返回两次通知,怎么处理?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
当钉钉审批流回调瞬间返回两次通知时,您可以采取以下方法进行处理:
去重处理:在接收到回调通知时,记录下每个回调的唯一标识符(如审批实例ID),并将其存储到一个数据结构中,比如数据库或缓存。在处理新的回调通知之前,先检查该标识符是否已经存在于数据结构中。如果存在,则说明该通知是重复的,可以忽略掉。
接口幂等性设计:在接口的设计上,考虑使用幂等性来保证重复请求不会产生副作用。即使接收到重复的回调通知,系统能够正确处理并返回相同的结果,而不会对数据状态造成改变。这样即使回调通知被重复触发,也不会对应用程序产生负面影响。
定时任务清理:通过定时任务或者其他机制,定期清理过期的回调记录。根据需求设定合适的时间窗口,删除过期的回调记录,以防止数据积累和占用资源。
监控和日志记录:建议在系统中添加监控和日志记录功能,以便及时发现和跟踪重复回调通知的情况。通过分析日志,可以进一步了解重复通知的原因,以及是否存在其他问题需要解决。
钉钉审批流回调应该只发一次通知给开发者。
但实际情况是,有些时候会瞬间返回两次回调通知,间距非常短。
这主要是由于钉钉审批流的回调机制:
首先是主回调
当审批结果(通过/不通过等)最终确定后,会发出主回调通知。
然后是定时回调
钉钉系统将在一定时间内(几秒到几分钟不等)进行第二次回调。
主要是为了防止主回调因为网络异常而丢失,所以设置了定时回调。
但是有时候
间隔时间非常短,主回调和定时回调瞬间都返回了。
所以开发方收到的就是两次回调通知,内容基本相同。
为了处理这种情况,开发者可以采取以下方法:
采用幂等设计
只处理第一次回调,忽略第二次。确保回调逻辑是幂等的。
设置一个标识
第一次回调后设置一个标识,第二次回调时检查标识已存在,则直接返回。