开发者社区 问答 正文

钉钉审批流回调瞬间返回两次通知,怎么处理?

钉钉审批流回调瞬间返回两次通知,怎么处理?

展开
收起
三分钟热度的鱼 2023-07-26 15:05:43 677 分享 版权
2 条回答
写回答
取消 提交回答
  • 当钉钉审批流回调瞬间返回两次通知时,您可以采取以下方法进行处理:

    1. 去重处理:在接收到回调通知时,记录下每个回调的唯一标识符(如审批实例ID),并将其存储到一个数据结构中,比如数据库或缓存。在处理新的回调通知之前,先检查该标识符是否已经存在于数据结构中。如果存在,则说明该通知是重复的,可以忽略掉。

    2. 接口幂等性设计:在接口的设计上,考虑使用幂等性来保证重复请求不会产生副作用。即使接收到重复的回调通知,系统能够正确处理并返回相同的结果,而不会对数据状态造成改变。这样即使回调通知被重复触发,也不会对应用程序产生负面影响。

    3. 定时任务清理:通过定时任务或者其他机制,定期清理过期的回调记录。根据需求设定合适的时间窗口,删除过期的回调记录,以防止数据积累和占用资源。

    4. 监控和日志记录:建议在系统中添加监控和日志记录功能,以便及时发现和跟踪重复回调通知的情况。通过分析日志,可以进一步了解重复通知的原因,以及是否存在其他问题需要解决。

    2023-07-26 19:04:01
    赞同 展开评论
  • 北京阿里云ACE会长

    钉钉审批流回调应该只发一次通知给开发者。

    但实际情况是,有些时候会瞬间返回两次回调通知,间距非常短。

    这主要是由于钉钉审批流的回调机制:

    首先是主回调
    当审批结果(通过/不通过等)最终确定后,会发出主回调通知。

    然后是定时回调
    钉钉系统将在一定时间内(几秒到几分钟不等)进行第二次回调。

    主要是为了防止主回调因为网络异常而丢失,所以设置了定时回调。

    但是有时候
    间隔时间非常短,主回调和定时回调瞬间都返回了。

    所以开发方收到的就是两次回调通知,内容基本相同。

    为了处理这种情况,开发者可以采取以下方法:

    采用幂等设计
    只处理第一次回调,忽略第二次。确保回调逻辑是幂等的。

    设置一个标识
    第一次回调后设置一个标识,第二次回调时检查标识已存在,则直接返回。

    2023-07-26 19:03:58
    赞同 展开评论