问题标签 [retry-logic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
540 浏览

unit-testing - 为使用 retryWhen 运算符的 RxJS 编写测试(了解与重试运算符的区别)

我正在尝试为以下使用运算符的函数编写测试retryWhen

该代码应该执行对某个远程 API 的请求geoApi.ipLocation$()。如果出现错误,它会在放弃之前重试 2 次。

我编写了以下使用 Jest 和 RxJS TestScheduler 的测试代码:

此测试失败。

但是,当我用retryWhen(...)simple替换时retry(2),测试成功。

看起来我不太明白如何retryretryWhen. 我怀疑这take(2)正在关闭流并阻止一切继续进行。但我不太明白。

我实际上想在里面写一些额外的逻辑retryWhen(),但首先我需要了解如何正确实现retry()with retryWhen()。或者这实际上是不可能的?

其他资源

我的retryWhen+实现take基于这个 SO 答案:

官方文档:

0 投票
1 回答
165 浏览

rabbitmq - 为延迟重试的指数退避配置 NServiceBus(使用 RabbitMQ 传输)

我正在尝试配置 NServiceBus 以实现延迟重试的指数退避方案。例如:

1) 在 2^0 分钟内第一次失败重试

2) 在 2^1 分钟内第二次失败重试

3) 在 2^2 分钟内第三次失败重试

我在 github 上发现了一个问题,似乎表明使用自定义可恢复性策略可以实现指数退避,但我无法从 Particular 的文档中确定如何实现这一点。

谁能指出我为 NServiceBus 设置自定义可恢复性策略的正确方向,该策略将为延迟重试启用指数退避?

0 投票
1 回答
1448 浏览

c# - 使用 SqlCommand 时依赖 SqlConnection 重试逻辑是否安全?

我正在使用 Microsoft.Practice.TransientFaultHandling 块进行重试逻辑。现在我将我的应用程序切换到 .Net 4.8 并为 SqlConnection 使用新构建的重试逻辑。我想知道我是否需要为我的 SqlCommand(我之前使用过 Polly)提供特殊的重试逻辑,或者这是否也是内置的。依赖内置函数时不可能记录重试,这使得测试非常困难。

微软在这里声明:

“有一个微妙之处。如果在执行查询时发生暂时性错误,您的 SqlConnection 对象不会重试连接操作。它当然不会重试您的查询。但是,SqlConnection 在发送查询之前会非常快速地检查连接执行。如果快速检查检测到连接问题,SqlConnection 重试连接操作。如果重试成功,则发送您的查询执行。

我通过在重试时间范围内断开并重新连接互联网来测试这一点,我的命令在一段时间后被执行。所以它似乎适用于这个简单的场景。但是依赖这个真的安全吗,还是我仍然需要为我的 SqlCommand 实现重试逻辑?

这是我的代码:

0 投票
0 回答
475 浏览

c# - 服务总线重试逻辑:更喜欢队列重试还是实现 Polly?

我已经实现了一个运行良好的服务总线队列侦听器。考虑到可能的失败,我必须在使用队列重试逻辑和使用 Polly 实现我自己的逻辑之间做出选择。我的直觉是使用 Polly 来更好地控制指数回退并区分“showstopper”和“ignorable”故障,但一位同事更喜欢使用服务总线重试逻辑。在我看来,队列重试逻辑很可能会一直失败,直到它将所有内容都放入死信队列,这增加了我们在监控和修复 dlq 方面的维护负担。

我考虑过一切吗?选择如何实现队列重试逻辑的一般准则是什么?

0 投票
1 回答
698 浏览

python - 坚韧模块的“重试”不适用于生成器

我在使用 python3 中的 tenacity 库中的“重试”工具时遇到问题。 当我使用生成器时,“重试”装饰器似乎不起作用。

我有一个代码示例来说明我的情况:

当它引发异常时,它不会重试。有人知道为什么这不起作用吗?

谢谢

0 投票
2 回答
607 浏览

c# - C# 中带有重试逻辑的 Parallel.ForEach 循环

我正在使用Parallel.ForEach将 C# 中的多个文件从谷歌存储桶下载到文件夹位置。我正在使用重试逻辑,因此它可以在下载过程中文件下载失败的情况下重试下载文件。如何为每个文件或Parallel.ForEach循环中的每个线程应用重试逻辑。

0 投票
0 回答
155 浏览

java - 如何从番石榴重试器获取原始错误消息?

我有一些代码周围的番石榴重试器:

但是,我在主应用程序中得到的唯一错误消息是在 X 次尝试后重试未能成功完成。我知道这是因为 guave 重试器一旦达到 5 的限制就会抛出 RetryException,但是有没有办法将导致此错误消息备份到我的主应用程序?

0 投票
0 回答
1466 浏览

apache-kafka - Kafka Producer 重试尝试

我是 KAFKA 的初学者。我被分配了一个简单的任务,使生产者能够在发送失败时重试。我们已经为这个 send() 方法添加了一个 kafka 生产者回调,它只记录响应(在引入重试之前)。

我的目标:尝试最多 5 次重试,以防生产者 send() 失败,如果最后一次重试尝试也失败,它应该写一个日志,说明在 5 次左右重试后发送消息的尝试失败。

我做了以下。

  1. 重试 = 5
  2. retry.backoff.ms = 35000(设置此重试间隔应大于 request.timeout.ms(30000 毫秒)- 但不确定)
  3. 尝试给一个已关闭的代理 - 使生产者 send() 失败,以便我可以检查重试配置是否有效 [max.in.flight.requests.per.connection 未设置为 1,因为排序并不重要为我们。]

我想知道以下内容,

  1. kafka 是否以任何方式记录重试尝试?- 例如:在每次尝试期间记录,如“重试...”,或在所有重试结束时记录,如“在 n 次重试后失败”

  2. 我已经收到类似这样的错误连续说了 n 次。如果这是我配置的重试尝试,我很困惑。如果是这样,为什么超过5倍以上。还是与生产者重试完全无关?

    [kafka-producer-network-thread | producer-1] WARN o.apache.kafka.clients.NetworkClient:代理可能不可用

项目详情:

  1. Gradle 项目
  2. kafka-clients-0.11.0.0

请不要回答这种含糊不清的问题。由于公司政策,我无法提供完整的详细信息,并且由于无法在我公司的虚拟机中访问此站点,因此我将无法复制粘贴错误。

0 投票
1 回答
2863 浏览

java - Resilience4j.retry 异常不工作

我正在使用弹性4j.retry弹性4j .断路器。Service1正在调用另一个Service2可能引发异常的服务。即使我遇到异常,我也应该尝试连接至少定义的次数waitDuration * maxRetryAttempts

服务 1 ---> 调用 ---> 服务 2

应用程序.yml

Service1Repository.java

但是,当Service2它关闭时,它不会重试(最多 4 次,每次应该在 1000 毫秒后发生)我会null立即得到响应(在我的情况下)。我尝试增加值(10000ms),还是一样。我看到打印了日志,但服务应该等待waitDuration * maxRetryAttempts是否Serviece2关闭。

0 投票
1 回答
1976 浏览

java - 如果@Retryable 返回值,则@Recover 不起作用

我正在尝试实现重试逻辑。我的代码按预期工作,直到重试方法的返回类型无效。当我将其更改为字符串时,@Recover 停止工作。

对于 foo 和 bar,重试逻辑是有效的。日志如下

但是当我将重试方法的返回类型更改为字符串时,@Recover 方法停止工作。

日志如下

我的 build.gradle 是

我究竟做错了什么?