问题标签 [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.
java - 带有退避和重试限制的演员重试
我需要在重试和最大重试限制之间增加时间的 akka 演员的重试机制。为此,我正在尝试使用 akka 提供的 BackOffSupervisor 模式。问题是,从我的测试来看,退避策略和重试限制似乎不起作用。或者问题出在测试中?
测试看起来像这样:
一个在前 5 条消息中抛出异常的简单 actor
}
BackOffSupervisor 配置
以及测试方法
测试结束太快了。在一秒钟内,从 BackoffSupervisor 的配置开始,我预计至少需要 50 多秒。
java - 以不同的间隔多次重试代码段
我想为我的android应用程序代码的一部分提供一个算法,如果它不满足不同时间间隔的条件,它将一次又一次地执行特定的代码段。简而言之,在不同的时间间隔后多次重试代码。
例如,我正在上传一些字符串数据,当有互联网连接时我会进行网络连接检查,当没有互联网时,它应该会在 1 分钟后自动再次检查。如果是肯定的,数据已经上传,如果不是,它应该在接下来的 3 分钟后重试,第三次如果是肯定的,数据已经上传,如果不是,它应该在接下来的 5 分钟后做最后的检查,然后如果它不能得到网络然后它应该显示吐司没有网络。
如何用简单的算法做到这一点?
这里的网络连接场景仅作为示例。正如我在那里解释的那样,我想要“重试”的算法。
提前致谢。
java - 每次以不同的间隔重试
我正在开发一个 ble-android 通信应用程序。当我尝试从 ble 设备读取值时,有时会收到 TYPE_GATT_ERROR。所以我喜欢在每次看到 TYPE_GATT_ERROR 时重试扫描和读取值。第一次发生时,我想在 30 秒后再次开始扫描,如果那时代码到达 TYPE_GATT_ERROR 段,它应该在 1 分钟后再次开始扫描,如果它到达错误段,它应该重新扫描间隔2分钟。如何使用以下代码段做到这一点?带有 TYPE_GATT_ERROR 条件的 Elseif 案例是我想要实现重试算法的地方。
请帮助我提供实现此目的的代码。
提前致谢。
kotlin - Reactor 中的自定义重试
我试图根据 Reactor 额外包的功能在 Kotlin 和 Reactor 中实现重试逻辑。我想要做的是传递一个持续时间列表,并且每次context.iteration
我都得到列表的第 (iteration-1)th 元素。它部分有效,我总是IndexOutOfBoundsException
在最后一次迭代中得到一个,这比我想要的要多,尽管我提供了最大重试次数 - 列表的大小。虽然重试在给定的持续时间和“正确”的次数内运行(肯定是因为IndexOutOfBoundsException
阻止了更多),但只有这个异常(这是根本原因)困扰着我。
这是我的自定义 BackOff 界面:
我的 Kotlin 扩展是:
我在这里想念什么?
python - 重试失败的 sqlalchemy 查询
每次我重新启动mysql
服务时,我的应用都会在任何查询中收到以下错误:
之后的任何查询都将照常成功。
例如,这只是一个常见的用例,通常我可能想根据错误重试任何查询。
有什么方法可以在一些低级sqlalchemy
api 中捕获并重试查询?在我的代码中执行 try-except 或自定义query
方法是不合理的,因为我使用它太多次并且它不可维护。
c# - 在 c# 中使用持续时间实现重试逻辑的最佳方法
我试图创建一个重试逻辑,它有一个时间限制,比如说 6 秒,重试次数为 6 次(包括第一次尝试),如果在 1sec 之前重试失败,它将在剩下的第二秒内休眠并尝试只在下一秒请求。我不知道除了下面的方法之外是否有更好的方法来实现这一点。
我尝试的是
非常感谢任何帮助,谢谢。
c# - 如何获取通过 Polly 重试策略执行的委托中的重试计数?
我正在实施 Polly 以在我的 C# Web 应用程序中重试请求。我的示例代码包含在这篇文章中。代码按预期工作,但传递给 CreateFile() 的最后一个参数(当前硬编码为 0)需要是 retryAttempt 的值。如何在执行操作中获取 retryAttempt 的值?
http - netflix 指挥 - http 类型任务 - 不应该从工作流开始 - 实现重试
我创建了一个重试5次的任务。并使用http类型的任务(我的rest url api端点)作为输入参数创建了一个工作流。
但是在我运行工作流程的那一刻 - 它正在访问其余的 api。实际上我想通过工人运行任务 - 在我的休息服务中调用另一个上游服务。
我想要什么 - 其余 url(url-2) 是另一个 url(url-1) 的上游。当我的应用程序调用 url-1 时,在代码中我将使用指挥任务来击中 url-2,并根据状态或关闭,我将失败状态 - 它会重试。
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 毫秒,如定义的那样。谁可以给我解释一下这个?
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); })
了,现在它正在工作并且微调器正在更新。