繁体   English   中英

WebFlux 的性能与重试指数退避

[英]Performance of WebFlux with retry exponential backoff

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

  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 内部重试功能很容易开发,但我对使用它有些担心,因为消息存储在应用程序 memory 中,当消息数量较多时可能会影响性能。 我想知道其他开发人员对这些选项的看法。 另外,有没有更好的选择?

在我看来,这两种方法可以一起使用。

重试策略是管理非常短暂的错误的最简单方法。 但是我们不能无限期地重试。

无限重试可能会导致 memory 问题。 但不仅如此,当您关闭服务器时。 您可能希望首先停止传入流量并期望在关闭期间没有计算/事务......

所以我们需要另一种策略来处理一些重试后失败的消息。 死信队列是一个有效的选择。

在现实生活中我们可能有几个 DQL,那么默认的一个用于意外情况。 显然,在这种情况下我们不能指望有一个好的算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM