有人可以帮助理解使用@Retryable
的方法之间的差异,其中包含WebFlux客户端调用和重试是由WebFlux自己支持的(例如retryWhen
)?
我想到的主要区别是,为了使用@Retryable
,您的方法需要从类外部调用,因为在引子下,@Retryable
使用spring的面向方面编程,它使用代理在您的目标方法上调用退休。这个主要用于阻塞方法。另一方面,spring webfluxretry
意味着当你的函数管道向它的订阅者发出异常时,你想在管道本身内重新尝试,这应该也适用于私有方法。
@Retryable
是一个Spring注释,可用于在方法因异常而失败时自动重试。当使用@Retryable
对方法进行注释时,如果该方法抛出注释的include属性中列出的异常,Spring将拦截该方法调用,并自动重试该方法。@Retryable
与传统的阻塞方法一起工作,适合用于同步、请求-响应风格的编程。
WebFlux
是一个非阻塞的响应式编程模型,用于在Spring中构建响应式应用程序。它提供了对响应式流的支持,并允许您构建可扩展的应用程序,以使用少量线程处理高并发性。WebFlux还为其Mono
和Flux
类型提供了一个重试操作符,它允许您在异步操作失败时重试。此操作符类似于@Retryable
注释,但设计用于响应式流而不是传统的阻塞方法。
以下是@Retryable
和WebFlux
重试操作符之间的一些关键区别:
@Retryable
与传统的阻塞方法一起工作,而重试操作符与响应流一起工作。@Retryable
用于注释方法,而重试操作符在Mono或Flux对象上调用。@Retryable
在抛出异常时重试方法,而重试操作符在操作失败时重试操作(例如,如果它产生错误信号)。@Retryable
允许您指定重试的最大次数和重试的回退策略,而重试操作符允许您指定重试的最大次数和重试谓词,以确定何时重试。