2

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

  1. 不可恢复的异常 - 不会尝试再次处理此类消息。
  2. 可恢复的异常 - 这种消息在被丢弃之前会被重试多次。
  3. 瞬态异常 - 这种消息将被永远重试。

有没有办法为每种异常定义不同的重试策略?我知道在 spring-kafka 中有提供 RetryTemplate 并实现上述行为的能力。

我认为也许使用 DLQ 机制会有一种方法来实现这种行为。

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

4

2 回答 2

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

于 2019-10-07T08:16:33.247 回答
0

目前无法在该范围内配置重试;有一个开放的新功能请求

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

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

于 2017-07-09T13:26:43.047 回答