rabbitmq 具有重试指数回退的WebFlux的性能

zvokhttg  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(226)

我正在构建一个webhook服务,它将事件发送到客户端的URL。如果失败或超时,我需要用指数回退重试发送。我有两种方法来实现逻辑:
1.使用WebClient的内部重试功能:

WebClient.create()
    .post()
    .uri(URL)
    .exchange()
    ...
    .retryWhen(Retry.backoff(4, Duration.ofSeconds(3)).jitter(0.7));

1.另一种方法是使用rabbitMQ deadLetterExchange以指数回退方式对消息进行重新排队,如下所述:https://www.baeldung.com/spring-amqp-exponential-backoff
应用WebFlux内部重试功能对于开发来说很容易,但是我对使用它有些担心,因为消息存储在应用程序内存中,当消息数量很大时,它可能会影响性能。我想知道其他开发人员对这些选项的想法。还有,有没有更好的选择?

t1qtbnec

t1qtbnec1#

在我看来,这两种方法可以一起使用。
重试策略是管理非常短暂的错误的最简单的方法,但是我们不能无限期地重试。
无限重试可能会导致内存问题。但不仅仅是这样!当你关闭一个服务器时,你可能希望先停止传入的流量,并期望在关闭过程中没有计算/事务...
因此,我们需要另一种策略来处理重试后失败的消息。死信队列是一个有效的选项。
在真实的生活中,我们可能会有多个DQL,那么默认的一个是用于意外的情况下,显然我们不希望有一个好的算法在这种情况下。

相关问题