根据 class 建议使用 RequestHandlerRetryAdvice

Using RequestHandlerRetryAdvice as per-class advice

Spring Core Advice API docs中定义了两种通知:

RequestHandlerRetryAdvice,根据 javadocs,具有无状态和有状态操作模式。

在什么情况下 RequestHandlerRetryAdvice 可以用作 per-class 建议? (即使用单个 bean 通知多个处理程序)。

是否可以按照 class 建议使用 "stateless mode" 实例?

是否可以根据 class 建议使用 "stateful mode" 实例?

我找不到关于 RequestHandlerRetryAdvice 是否将状态添加到代理对象的信息,这是应用 per-class/per-object 建议标准的必要条件,如 Spring 核心参考中所述。

我的期望是,在有状态模式下,建议不能按 class.

使用

而对于无状态模式,是否扩展状态尚不清楚。 (如果由多个处理程序共享 - 将要求在任何给定时刻最多只有一个处理程序使用重试建议?)

请注意,an answer in another post 意味着它始终可以,因为它是 "thread safe"。但是,根据 Spring 核心参考文档(以上引用),此条件不足以允许 per-class 使用。

在此环境中使用有状态重试时,状态(通常)是按消息维护的,而不是按处理程序维护的;可以在多个处理程序上使用相同的建议,只要您不希望生成相同标识符的消息在不同线程上同时命中多个处理程序(这是非常不寻常的)。但即使是那种情况也可以通过适当的状态生成器来解决。

来自Spring Integration Documentation...

To make retry stateful, we need to provide the Advice with a RetryStateGenerator implementation. This class is used to identify a message as being a resubmission so that the RetryTemplate can determine the current state of retry for this message. The framework provides a SpelExpressionRetryStateGenerator which determines the message identifier using a SpEL expression.