问题标签 [resque-retry]

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 回答
831 浏览

ruby-on-rails - 使用 Resque-retry 重置指数退避

我有需要在指数退避失败后延迟的resque任务。但有时应该重置指数退避 - 如果作业朝着其最终目标取得进展,延迟应该重置为非常短,但如果它卡在失败中,它应该继续等待。所以作业会运行,如果失败,有两种不同的失败模式。在一种故障模式下,作业应该很快再次重试,但随后开始退避。在另一种故障模式下,作业应该比前一次尝试之前的延迟延迟更长的时间(比如 2 倍)。

似乎retry_criteria_check应该能够做到这一点,但我不确定如何将它与Resque::Plugins::ExponentialBackoff. 我假设我将通过抛出不同的异常来传达不同的故障模式,除非有人可以提出更好的方法。

0 投票
1 回答
268 浏览

ruby-on-rails - 每当作业失败时如何自动调用 resque-cleaner 方法?

https://github.com/ono/resque-cleaner

本文档解释了如何在控制台中使用这些方法。如果我想调用该方法以在特定作业失败后立即重新排队怎么办。

0 投票
1 回答
1175 浏览

ruby-on-rails - 我在哪里放置我的 resque-retry 失败后端代码?

resque-retry gem的README 讨论了在实现时更改失败的后端实现。

MultipleWithRetrySuppression是一个多重失败的后端,带有重试抑制。

这是一个使用 Redis 故障后端的示例:

如果作业失败,但可以并且将重试,则失败详细信息不会记录在 Redis 失败队列中(通过 resque-web 可见)

如果作业失败,但不能或不会重试,则失败将记录在 Redis 失败队列中,就像正常失败(不重试)一样。

我不确定该代码应该放在我的 Rails 应用程序的哪个位置。我是否应该将它放入任何随机初始化程序文件中,例如config/initializers/resque.rb?或者我的应用程序中还有其他地方应该去哪里?文档不清楚。

0 投票
2 回答
938 浏览

ruby-on-rails - 对 resque .perform 方法设定期望。任务在回调中排队

所以根据我的理解,我相信你这样做

Resque.inline = Rails.env.test?

您的 resque 任务将同步运行。我正在编写一个关于在after_commit回调期间排队的 resque 任务的测试。

after_commit :enqueue_several_jobs

.perform我的 Resque 任务类的方法中,我正在做一个Rails.logger.info并且在我的测试中,我正在做类似的事情

我对PingTwitter和有相同的测试PingPinterest

我在第二个和第三个期望上都失败了,因为似乎测试实际上在所有 resque 作业运行之前就完成了。只有第一个测试真正通过。RSpec 然后抛出一个MockExpectationError告诉我其他两个测试Rails.logger没有收到的消息。.info有人有过这方面的经验吗?

编辑

有人提到它的should_receive行为类似于 a mock,而我应该这样做.exactly(n).times。很抱歉没有早点说清楚,但我对不同的it区块有我的期望,我不认为should_receive一个it区块会在下一个区块模拟它it?让我知道我是否错了。

0 投票
2 回答
487 浏览

ruby-on-rails - Resque retry 立即重试

这是我拥有的代码

我遇到了一个问题,每当我在本地将此任务排入队列时,Resque 似乎会立即重试该任务,而不考虑退避策略。有没有人遇到过这个问题?

0 投票
1 回答
923 浏览

resque - 如何将作业重新排队到 Resque?

我是 Resque 的新手,过去 2 个月我一直在生产中使用它,我现在遇到一个问题,如果出现异常,我希望我的作业在队列中重新排队。我的工作进行了大约 50 次外部 HTTP 调用,其中一些调用由于延迟而失败,有时服务中断。我正在探索https://github.com/lantins/resque-retry但我试图了解 resque-retry 是否重试作业或重新排队,我不希望失败的作业优先于另一个此队列中的作业,我希望它再次添加到队列中。此外,我所有的 HTTP 调用都有一个救援块,在使用 resque-retry 时,我必须对这个类(从 Resque 执行调用)进行一些更改,以便它被重试/重新排队。

0 投票
1 回答
100 浏览

ruby - Resque 弹出而不是失败

我有一个简单的 ruby​​resque 代码。

但是由于一些代码问题,一些工作失败了。

问题是它们不会出现在失败的作业中,它们只是消失了(一旦从队列中取出作业,它就会被弹出,所以它被删除了)。

我怎样才能使工作处于失败的位置?

0 投票
0 回答
102 浏览

ruby - resque-retry - '重试尝试' 显示为 'n/a'

我正在使用 resque-retry 重试我的工作。我在 resque-web 界面的“重试”选项卡上看到需要重试的作业。但是,“重试尝试”信息始终为“不适用”。是否有一个原因?提前致谢!

0 投票
4 回答
6186 浏览

heroku - 从 Heroku 上的 Resque::TermException 或 SIGTERM 干净地恢复

当我们重新启动或部署时,我们会在失败的队列中使用Resque::TermException (SIGTERM)或获得许多 Resque 作业Resque::DirtyExit

我们TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10在 Procfile 中使用新的,所以我们的工作行看起来像:

我们还使用resque-retry了我认为可能会自动重试这两个异常的方法?但似乎不是。

所以我猜有两个问题:

  1. 我们可以在每个作业中手动救援Resque::TermException,并使用它来重新安排作业。但是有没有一种干净的方法可以为所有工作做到这一点?甚至是猴子补丁。
  2. resque-retry 不应该自动重试这些吗?你能想出什么理由不这样做吗?

谢谢!

编辑:让所有工作在 10 秒内完成似乎在规模上是不合理的。似乎需要一种方法来在运行 Resque::DirtyExit 异常时自动重新排队这些作业。

0 投票
0 回答
246 浏览

android - 在UIL android中停止重试

nostra Android-Universal-Image-Loader在我的应用程序中使用。

当服务器上没有具有该 url 的图像时,它重试了太多次。

我怎样才能让它停止重试?