问题标签 [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.
unit-testing - 为使用 retryWhen 运算符的 RxJS 编写测试(了解与重试运算符的区别)
我正在尝试为以下使用运算符的函数编写测试retryWhen
:
该代码应该执行对某个远程 API 的请求geoApi.ipLocation$()
。如果出现错误,它会在放弃之前重试 2 次。
我编写了以下使用 Jest 和 RxJS TestScheduler 的测试代码:
此测试失败。
但是,当我用retryWhen(...)
simple替换时retry(2)
,测试成功。
看起来我不太明白如何retry
用retryWhen
. 我怀疑这take(2)
正在关闭流并阻止一切继续进行。但我不太明白。
我实际上想在里面写一些额外的逻辑retryWhen()
,但首先我需要了解如何正确实现retry()
with retryWhen()
。或者这实际上是不可能的?
其他资源
我的retryWhen
+实现take
基于这个 SO 答案:
官方文档:
rabbitmq - 为延迟重试的指数退避配置 NServiceBus(使用 RabbitMQ 传输)
我正在尝试配置 NServiceBus 以实现延迟重试的指数退避方案。例如:
1) 在 2^0 分钟内第一次失败重试
2) 在 2^1 分钟内第二次失败重试
3) 在 2^2 分钟内第三次失败重试
我在 github 上发现了一个问题,似乎表明使用自定义可恢复性策略可以实现指数退避,但我无法从 Particular 的文档中确定如何实现这一点。
谁能指出我为 NServiceBus 设置自定义可恢复性策略的正确方向,该策略将为延迟重试启用指数退避?
c# - 使用 SqlCommand 时依赖 SqlConnection 重试逻辑是否安全?
我正在使用 Microsoft.Practice.TransientFaultHandling 块进行重试逻辑。现在我将我的应用程序切换到 .Net 4.8 并为 SqlConnection 使用新构建的重试逻辑。我想知道我是否需要为我的 SqlCommand(我之前使用过 Polly)提供特殊的重试逻辑,或者这是否也是内置的。依赖内置函数时不可能记录重试,这使得测试非常困难。
微软在这里声明:
“有一个微妙之处。如果在执行查询时发生暂时性错误,您的 SqlConnection 对象不会重试连接操作。它当然不会重试您的查询。但是,SqlConnection 在发送查询之前会非常快速地检查连接执行。如果快速检查检测到连接问题,SqlConnection 重试连接操作。如果重试成功,则发送您的查询执行。
我通过在重试时间范围内断开并重新连接互联网来测试这一点,我的命令在一段时间后被执行。所以它似乎适用于这个简单的场景。但是依赖这个真的安全吗,还是我仍然需要为我的 SqlCommand 实现重试逻辑?
这是我的代码:
c# - 服务总线重试逻辑:更喜欢队列重试还是实现 Polly?
我已经实现了一个运行良好的服务总线队列侦听器。考虑到可能的失败,我必须在使用队列重试逻辑和使用 Polly 实现我自己的逻辑之间做出选择。我的直觉是使用 Polly 来更好地控制指数回退并区分“showstopper”和“ignorable”故障,但一位同事更喜欢使用服务总线重试逻辑。在我看来,队列重试逻辑很可能会一直失败,直到它将所有内容都放入死信队列,这增加了我们在监控和修复 dlq 方面的维护负担。
我考虑过一切吗?选择如何实现队列重试逻辑的一般准则是什么?
python - 坚韧模块的“重试”不适用于生成器
我在使用 python3 中的 tenacity 库中的“重试”工具时遇到问题。 当我使用生成器时,“重试”装饰器似乎不起作用。
我有一个代码示例来说明我的情况:
当它引发异常时,它不会重试。有人知道为什么这不起作用吗?
谢谢
c# - C# 中带有重试逻辑的 Parallel.ForEach 循环
我正在使用Parallel.ForEach
将 C# 中的多个文件从谷歌存储桶下载到文件夹位置。我正在使用重试逻辑,因此它可以在下载过程中文件下载失败的情况下重试下载文件。如何为每个文件或Parallel.ForEach
循环中的每个线程应用重试逻辑。
java - 如何从番石榴重试器获取原始错误消息?
我有一些代码周围的番石榴重试器:
但是,我在主应用程序中得到的唯一错误消息是在 X 次尝试后重试未能成功完成。我知道这是因为 guave 重试器一旦达到 5 的限制就会抛出 RetryException,但是有没有办法将导致此错误消息备份到我的主应用程序?
apache-kafka - Kafka Producer 重试尝试
我是 KAFKA 的初学者。我被分配了一个简单的任务,使生产者能够在发送失败时重试。我们已经为这个 send() 方法添加了一个 kafka 生产者回调,它只记录响应(在引入重试之前)。
我的目标:尝试最多 5 次重试,以防生产者 send() 失败,如果最后一次重试尝试也失败,它应该写一个日志,说明在 5 次左右重试后发送消息的尝试失败。
我做了以下。
- 重试 = 5
- retry.backoff.ms = 35000(设置此重试间隔应大于 request.timeout.ms(30000 毫秒)- 但不确定)
- 尝试给一个已关闭的代理 - 使生产者 send() 失败,以便我可以检查重试配置是否有效 [max.in.flight.requests.per.connection 未设置为 1,因为排序并不重要为我们。]
我想知道以下内容,
kafka 是否以任何方式记录重试尝试?- 例如:在每次尝试期间记录,如“重试...”,或在所有重试结束时记录,如“在 n 次重试后失败”
我已经收到类似这样的错误连续说了 n 次。如果这是我配置的重试尝试,我很困惑。如果是这样,为什么超过5倍以上。还是与生产者重试完全无关?
[kafka-producer-network-thread | producer-1] WARN o.apache.kafka.clients.NetworkClient:代理可能不可用
项目详情:
- Gradle 项目
- kafka-clients-0.11.0.0
请不要回答这种含糊不清的问题。由于公司政策,我无法提供完整的详细信息,并且由于无法在我公司的虚拟机中访问此站点,因此我将无法复制粘贴错误。
java - Resilience4j.retry 异常不工作
我正在使用弹性4j.retry和弹性4j .断路器。Service1
正在调用另一个Service2
可能引发异常的服务。即使我遇到异常,我也应该尝试连接至少定义的次数waitDuration * maxRetryAttempts
。
服务 1 ---> 调用 ---> 服务 2
应用程序.yml
Service1Repository.java
但是,当Service2
它关闭时,它不会重试(最多 4 次,每次应该在 1000 毫秒后发生)我会null
立即得到响应(在我的情况下)。我尝试增加值(10000ms),还是一样。我看到打印了日志,但服务应该等待waitDuration * maxRetryAttempts
是否Serviece2
关闭。
java - 如果@Retryable 返回值,则@Recover 不起作用
我正在尝试实现重试逻辑。我的代码按预期工作,直到重试方法的返回类型无效。当我将其更改为字符串时,@Recover 停止工作。
对于 foo 和 bar,重试逻辑是有效的。日志如下
但是当我将重试方法的返回类型更改为字符串时,@Recover 方法停止工作。
日志如下
我的 build.gradle 是
我究竟做错了什么?