问题标签 [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 回答
906 浏览

java - 带有退避和重试限制的演员重试

我需要在重试和最大重试限制之间增加时间的 akka 演员的重试机制。为此,我正在尝试使用 akka 提供的 BackOffSupervisor 模式。问题是,从我的测试来看,退避策略和重试限制似乎不起作用。或者问题出在测试中?

测试看起来像这样:

一个在前 5 条消息中抛出异常的简单 actor

}

BackOffSupervisor 配置

以及测试方法

测试结束太快了。在一秒钟内,从 BackoffSupervisor 的配置开始,我预计至少需要 50 多秒。

0 投票
2 回答
225 浏览

java - 以不同的间隔多次重试代码段

我想为我的android应用程序代码的一部分提供一个算法,如果它不满足不同时间间隔的条件,它将一次又一次地执行特定的代码段。简而言之,在不同的时间间隔后多次重试代码。

例如,我正在上传一些字符串数据,当有互联网连接时我会进行网络连接检查,当没有互联网时,它应该会在 1 分钟后自动再次检查。如果是肯定的,数据已经上传,如果不是,它应该在接下来的 3 分钟后重试,第三次如果是肯定的,数据已经上传,如果不是,它应该在接下来的 5 分钟后做最后的检查,然后如果它不能得到网络然后它应该显示吐司没有网络。

如何用简单的算法做到这一点?

这里的网络连接场景仅作为示例。正如我在那里解释的那样,我想要“重试”的算法。

提前致谢。

0 投票
0 回答
52 浏览

java - 每次以不同的间隔重试

我正在开发一个 ble-android 通信应用程序。当我尝试从 ble 设备读取值时,有时会收到 TYPE_GATT_ERROR。所以我喜欢在每次看到 TYPE_GATT_ERROR 时重试扫描和读取值。第一次发生时,我想在 30 秒后再次开始扫描,如果那时代码到达 TYPE_GATT_ERROR 段,它应该在 1 分钟后再次开始扫描,如果它到达错误段,它应该重新扫描间隔2分钟。如何使用以下代码段做到这一点?带有 TYPE_GATT_ERROR 条件的 Elseif 案例是我想要实现重试算法的地方。

请帮助我提供实现此目的的代码。

提前致谢。

0 投票
1 回答
894 浏览

kotlin - Reactor 中的自定义重试

我试图根据 Reactor 额外包的功能在 Kotlin 和 Reactor 中实现重试逻辑。我想要做的是传递一个持续时间列表,并且每次context.iteration我都得到列表的第 (iteration-1)th 元素。它部分有效,我总是IndexOutOfBoundsException在最后一次迭代中得到一个,这比我想要的要多,尽管我提供了最大重试次数 - 列表的大小。虽然重试在给定的持续时间和“正确”的次数内运行(肯定是因为IndexOutOfBoundsException阻止了更多),但只有这个异常(这是根本原因)困扰着我。

这是我的自定义 BackOff 界面:

我的 Kotlin 扩展是:

我在这里想念什么?

0 投票
4 回答
6734 浏览

python - 重试失败的 sqlalchemy 查询

每次我重新启动mysql服务时,我的应用都会在任何查询中收到以下错误:

之后的任何查询都将照常成功。

例如,这只是一个常见的用例,通常我可能想根据错误重试任何查询。

有什么方法可以在一些低级sqlalchemyapi 中捕获并重试查询?在我的代码中执行 try-except 或自定义query方法是不合理的,因为我使用它太多次并且它不可维护。

0 投票
0 回答
72 浏览

c# - 在 c# 中使用持续时间实现重试逻辑的最佳方法

我试图创建一个重试逻辑,它有一个时间限制,比如说 6 秒,重试次数为 6 次(包括第一次尝试),如果在 1sec 之前重试失败,它将在剩下的第二秒内休眠并尝试只在下一秒请求。我不知道除了下面的方法之外是否有更好的方法来实现这一点。

我尝试的是

非常感谢任何帮助,谢谢。

0 投票
1 回答
4853 浏览

c# - 如何获取通过 Polly 重试策略执行的委托中的重试计数?

我正在实施 Polly 以在我的 C# Web 应用程序中重试请求。我的示例代码包含在这篇文章中。代码按预期工作,但传递给 CreateFile() 的最后一个参数(当前硬编码为 0)需要是 retryAttempt 的值。如何在执行操作中获取 retryAttempt 的值?

0 投票
0 回答
352 浏览

http - netflix 指挥 - http 类型任务 - 不应该从工作流开始 - 实现重试

我创建了一个重试5次的任务。并使用http类型的任务(我的rest url api端点)作为输入参数创建了一个工作流。

但是在我运行工作流程的那一刻 - 它正在访问其余的 api。实际上我想通过工人运行任务 - 在我的休息服务中调用另一个上游服务。

我想要什么 - 其余 url(url-2) 是另一个 url(url-1) 的上游。当我的应用程序调用 url-1 时,在代码中我将使用指挥任务来击中 url-2,并根据状态或关闭,我将失败状态 - 它会重试。

0 投票
0 回答
3354 浏览

c# - 使用指数退避计算延迟

我正在根据以下页面上的 Microsoft 示例代码编写自己的带有指数退避的重试逻辑:https ://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/implement-resilient-applications/explore-自定义 http-call-retries-exponential-backoff

在下面的代码行中有一个我无法理解的除以 2:

假设我定义int m_delayMilliseconds = 200了 ,所以我们得到以下延迟:

200 * 1 / 2 --> 100 毫秒

200 * 2 / 2 --> 200 毫秒

200 * 4 / 2 --> 400 毫秒

200 * 8 / 2 --> 800 毫秒

200 * 16 / 2 --> 1600 毫秒

. . . 等等

令我不安的是,我的第一个延迟为 100 毫秒,但我希望最小延迟为 200 毫秒,如定义的那样。谁可以给我解释一下这个?

0 投票
1 回答
346 浏览

web-services - 异步方法中的 .Show() 上未显示进度对话框

我有异步方法ExecuteWithRetryAsync,它实现了一些重试逻辑,并且必须在调用时立即显示 ProgressDialog。目前,第一个电话Show()从来没有真正奏效。进度对话框仅在AlertDialog确认后显示(第二条评论)。如何Show()在 ExecuteWithRetryAsync 开始时实际显示进度对话框?

更新:我观察到,当设备连接被禁用时,大约需要 10-15 秒ExecuteWithRetryAsync才能开始执行,同时设备多次显示应用程序没有响应对话框,而连接上它会立即执行。为什么?

更新 2:当我await Task.Delay (50)调用 Show() 后,它确实显示了,但进度对话框动画没有更新,它被冻结了。

更新 3:我result = methodInfo?.Invoke(Utility.WsHueckmann, args)在 await Task.Run 中放入以下行,这样它就变成await Task.Run(() => { result = methodInfo?.Invoke(Utility.WsHueckmann, args); })了,现在它正在工作并且微调器正在更新。