首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义使用Amazon从矮人(红宝石)重试延迟

自定义使用Amazon从矮人(红宝石)重试延迟
EN

Stack Overflow用户
提问于 2015-09-08 15:14:28
回答 1查看 2K关注 0票数 2

我正在将使用塞德基创建的后台作业处理服务迁移到简约肯,该服务基于Amazon。使用sidekiq,您可以使用sidekiq_retry_in自定义重试模式。

代码语言:javascript
复制
class WorkerWithCustomRetry
    include Sidekiq::Worker
    sidekiq_options :retry => 5

    sidekiq_retry_in do |count|
        retry_count(count)
    end

    def self.retry_count(count)
    ...
    end
end

在我的例子中,retry_count根据外部配置返回下一次重试的延迟。使用,只要使用者应用程序不删除消息,重试就会自动被SQS处理。但是,使用短缩,您可以通过使用retry_intervals更改延迟,但文档只解释了如何设置固定值:

代码语言:javascript
复制
class MyWorker
    include Shoryuken::Worker

    shoryuken_options queue: 'default', retry_intervals: [360, 1200, 3600] # 5.minutes, 20.minutes and 1.hour

end

我需要用与sidekiq相同的方式定制重试的延迟,使用retry_count方法,根据外部数据返回不同的值。这是可能的,还是确实存在一种解决办法,可以用shoryuken来实现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-17 01:30:45

目前,矮化只支持指数退避的固定值,但您可以提交一个更改ExponentialBackoffRetry的PR,其中:

代码语言:javascript
复制
# https://github.com/phstc/shoryuken/blob/290b1cb4c4c40f34881d7f7b7a3beda949099cf5/lib/shoryuken/middleware/server/exponential_backoff_retry.rb#L11

retry_intervals = worker.class.get_shoryuken_options['retry_intervals']

retry_intervals = if retry_intervals.respond_to? :call
                    retry_intervals.call(worker, queue, sqs_msg, body)
                  else
                    Array(retry_intervals)
                  end

因此,您可以使用proc或固定值来设置retry_intervals,即:

代码语言:javascript
复制
class MyWorker
  include Shoryuken::Worker

  shoryuken_options queue: 'default', 
    retry_intervals: -> (worker, queue, sqs_msg, body) { worker.your_method(...) }
end

或者您可以删除默认的ExponentialBackoffRetry并添加您的:

代码语言:javascript
复制
Shoryuken.configure_server do |config|
  config.server_middleware do |chain|
    chain.remove Middleware::Server::ExponentialBackoffRetry
    chain.add YourExponentialBackoffRetry
  end
end

但是请记住,SQS并不正式支持指数退避,它是在最短时间内使用可见性超时实现的,它可以延长到最长12小时。

ChangeMessageVisibility.html 您可以继续调用ChangeMessageVisibility将可见性超时延长到最长12小时。如果你试图延长超过12个小时,该请求将被拒绝。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32461435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档