有风,不大,天气晴朗
今天的任务之一是在对接一个非幂等的接口的基础上为其添加重试的逻辑。之前偶然看得 Spring Retry 这样项目,所以借此机会研究了一下。这个项目顾名思义,就是专门做重试的(从 Spring Batch 抽出来的)
但遗憾的是,花了两个小时(有些长)了解了 Spring Retry 之后,发现 Spring Retry 这个项目不能满足我的需要。
因为对接的接口是非幂等的,所以不能简单的反复重试。在重试之前需要做查询功能,避免不必要的重试带来的业务错误。但 Spring Retry 的 @Retryable 顾名思义,是反复重试被这个注释所标记的方法,当重试条件满足时。
上面描述的是 Spring Retry 的声明式的重试机制,它还有编程时的代码重试。同时,Spring Retry 还有有状态和无状态的重试两个概念,所以我想 Spring Retry 通过编程的方式还是可以实现我的需要,但那又和我自己写有什么区别呢。
对于重试这个功能,我又自己实现一个小框架的想法。
但是,要再次强调,服务应当是幂等的。