每个例外的spring-cloud-stream重试策略

时间:2017-07-09 13:05:36

标签: spring-cloud-stream spring-retry

在spring-cloud-stream项目的文档中,我看到的唯一重试机制是单一的退避策略。
我希望实现的行为是三种不同的重试策略,以防在使用消息时抛出异常:

  1. 不可恢复的异常 - 不会再次尝试处理此类消息。
  2. 可恢复的异常 - 这种消息在被丢弃之前会被重试多次。
  3. 瞬态异常 - 这种消息将永远重试。
  4. 有没有办法为每种异常定义不同的重试策略? 我知道在spring-kafka中有能力提供RetryTemplate并实现上述行为。

    我认为可能使用DLQ机制可以实现这种行为。

    编辑:我使用Kafka作为消息传递中间件。

2 个答案:

答案 0 :(得分:2)

从Spring Cloud Stream 2.0.0向上,您可以定义自己的RetryTemplate

@StreamRetryTemplate
public RetryTemplate myRetryTemplate() {
    return new RetryTemplate();
}

此处提供完整文档:https://docs.spring.io/spring-cloud-stream/docs/current/reference/htmlsingle/#_retry_template

答案 1 :(得分:0)

目前无法在此范围内配置重试;有an open new feature request

但是,您始终可以使用RetryTemplate在侦听器中实现自己的逻辑,并禁用活页夹的重试。

如果您使用的是Rabbit绑定器,则可以使用DLQ和republishToDlq=true,DLQ消息将包含异常标头。然后,您可以让另一个应用程序使用这些消息,并根据异常类型采取适当的操作。