Spring @Retryable vs WebFlux retry



有人可以帮助理解使用@Retryable的方法之间的差异,其中包含WebFlux客户端调用和重试是由WebFlux自己支持的(例如retryWhen)?

我想到的主要区别是,为了使用@Retryable,您的方法需要从类外部调用,因为在引子下,@Retryable使用spring的面向方面编程,它使用代理在您的目标方法上调用退休。这个主要用于阻塞方法。另一方面,spring webfluxretry意味着当你的函数管道向它的订阅者发出异常时,你想在管道本身内重新尝试,这应该也适用于私有方法。

@Retryable是一个Spring注释,可用于在方法因异常而失败时自动重试。当使用@Retryable对方法进行注释时,如果该方法抛出注释的include属性中列出的异常,Spring将拦截该方法调用,并自动重试该方法。@Retryable与传统的阻塞方法一起工作,适合用于同步、请求-响应风格的编程。

WebFlux是一个非阻塞的响应式编程模型,用于在Spring中构建响应式应用程序。它提供了对响应式流的支持,并允许您构建可扩展的应用程序,以使用少量线程处理高并发性。WebFlux还为其MonoFlux类型提供了一个重试操作符,它允许您在异步操作失败时重试。此操作符类似于@Retryable注释,但设计用于响应式流而不是传统的阻塞方法。

以下是@RetryableWebFlux重试操作符之间的一些关键区别:

@Retryable与传统的阻塞方法一起工作,而重试操作符与响应流一起工作。@Retryable用于注释方法,而重试操作符在Mono或Flux对象上调用。@Retryable在抛出异常时重试方法,而重试操作符在操作失败时重试操作(例如,如果它产生错误信号)。@Retryable允许您指定重试的最大次数和重试的回退策略,而重试操作符允许您指定重试的最大次数和重试谓词,以确定何时重试。

最新更新