gpt4 book ai didi

ruby - 使用来自 Shoryuken (ruby) 的 Amazon SQS 自定义重试延迟

转载 作者:数据小太阳 更新时间:2023-10-29 08:44:52 28 4
gpt4 key购买 nike

我正在迁移使用 sidekiq 制作的后台作业处理服务至 shoryuken , 这是基于 Amazon SQS .使用 sidekiq,您可以使用 sidekiq_retry_in 自定义重试模式:

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 根据外部配置返回下一次重试的延迟。使用 shoryuken 时,只要消息未被消费者应用程序删除,重试就会交给 SQS,SQS 会自动处理重试。但是,对于 shoryuken,您可以使用 retry_intervals 更改延迟,但 documentation只说明如何设置固定值:

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 这是否可能或是否存在解决方法?

最佳答案

目前 Shoryuken 仅支持指数退避的固定值,但您可以提交 PR 更改 ExponentialBackoffRetry与:

# 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

因此您将能够使用过程或固定值来设置retry_intervals,即:

class MyWorker
include Shoryuken::Worker

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

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

Shoryuken.configure_server do |config|
config.server_middleware do |chain|
chain.remove Middleware::Server::ExponentialBackoffRetry
chain.add YourExponentialBackoffRetry
end
end

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

https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ChangeMessageVisibility.html

You can continue to call ChangeMessageVisibility to extend the visibility timeout to a maximum of 12 hours. If you try to extend beyond 12 hours, the request will be rejected.

关于ruby - 使用来自 Shoryuken (ruby) 的 Amazon SQS 自定义重试延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32461435/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com