使用RequestHandlerRetryAdvice作为每类建议

时间:2017-10-16 07:08:41

标签: spring-integration spring-retry

Spring Core Advice API docs中,定义了两种建议:

  • 每班建议 - 不得“依赖于代理对象的状态或添加新状态”
  • 每个实例建议 - “将状态添加到代理对象”
根据javadocs,

RequestHandlerRetryAdvice具有无状态和有状态的操作模式。

RequestHandlerRetryAdvice在哪些条件下可以用作每类建议? (即使用单个bean来建议多个处理程序)。

“无状态模式”可以用作每班建议吗?

可以将“有状态模式”实例用作每类建议吗?

我无法找到有关RequestHandlerRetryAdvice是否向代理对象添加状态的信息,这是应用每类/每对象建议的条件标准所需的条件,如Spring Core参考中所述。

我的期望是在有状态模式下,建议不能用作每班。

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

请注意,an answer in another post意味着它始终可以,因为它是“线程安全的”。但是,根据Spring Core参考文档(上面引用),这个条件不足以允许每类使用。

1 个答案:

答案 0 :(得分:0)

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

来自Spring Integration Documentation ...

  

要使重试有状态,我们需要为Advice提供RetryStateGenerator实现。此类用于将消息标识为重新提交,以便RetryTemplate可以确定此消息的当前重试状态。该框架提供了SpelExpressionRetryStateGenerator,它使用SpEL表达式确定消息标识符。