def cancel! job_id
cancel_second = 1
Sidekiq.redis {|c| c.setex("sidekiq:status:#{job_id}", cancel_second, 1) }
此方法会将执行中的sidekiq放入重试中。
1.如果是worker任务的话,你只需要 在worker添加配置
sidekiq_options retry: 1
2.如果是 ActiveJob引用sidekiq的话,你需要在执行的时候放入以下部分
ApplicationJob.set(retry: false).perform_later
set(retry: boolean) true 是重试,false不重试
ruby on rails 使用gem sidekiq,执行中的任务 在sidekiq的任务中很难取消,解决此方法由以下方法:暴力方法:# 此方法会重新设置redis的key,将会会进入到失败队列# “cancelled-”是你的sidekiq中redis的命令空间 例如 sidekiq:status: => 例如 Sidekiq.redis {|c| c.set("sidekiq:status:#{jid}", "123456") }Sidekiq.redis {|c| c.set("
Lambdakiq
使用 gem在AWS Lambda中运行Rails时, 替代产品。
Lambdakiq允许您最大程度地利用AWS的托管基础架构。 管理吊舱和漫长的轮询过程的日子已经一去不复返了。 相反,AWS直接将消息传递到Rails的工作职能部门,并根据需要对其进行放大和缩小。 可观察性是使用AWS CloudWatch指标,仪表板和警报内置的。 了解有关更多信息或立即开始。
独特的Web和Jobs Lambda功能。
AWS完全托管的轮询。 事件驱动。
最多12次重试。 每个作业都是可配置的。
镜像Sidekiq的重试时间。
最后重试时间为11小时30分钟。
支持ActiveJob的等待/延迟。 最多15分钟。
无效消息最多可存储14天。
该gem假定您的Rails应用程序在AWS Lambda上,最好与我们的 gem一起使用。 它可能使用了
这将对股票Sidekiq重试中间件进行子分类,以便您可以
重试已禁用重试的作业(重试:0或重试:false)
中止(不要重试)默认情况下将重试的作业
但仍然让该作业引发异常,以便您可以观察到该作业失败(通过检查日志,使用等)。
不要用它代替您的工作成为幂等!
将此行添加到您的应用程序的Gemfile中:
gem 'sidekiq-retries'
class NoRetryJob
include Sidekiq::Worker
sidekiq_options retry: false # or retry: 0
def perform
# retry this job when it otherwise would not
raise Sidekiq::Retries::Retry.new(RuntimeError
ActiveJob :: Retriable
自动重试失败的ActiveJob,并采用指数补偿。
该gem旨在模仿Sidekiq的RetryJobs中间件的大多数功能,但可在ActiveJob层上运行。
要安装gem,请将以下内容添加到您的Gemfile中:
gem "activejob-retriable"
如果您使用的是Rails 5,请使用Github上的分支母版获得支持。 一旦Rails 5的第一个稳定版本发布,我们将推出5.0版本的gem。
gem "activejob-retriable" , github : "SimplyBuilt/activejob-retr
要安装asynq库和asynqmon命令行工具,请运行以下命令:
go get -u github.com/hibiken/asynq
go get -u github.com/hibiken/asynq/tools/asynqmon
Consumer:sidekiq 进程
Sidekiq会加载Rails的代码,所以可以使用 Rails app 的各种类、各种方法等等更新Rails代码后,Sidekiq 进程需要重新启动,以便reload代码。Sidekiq 是多线程,默认25个
Publisher:Rails
Sidekiq通过Redis Gem(一个Redis client)和Redis通讯。
job :某一个任务的一次执行;
worker:Sidekiq是使用 Celluoid 来完成其多线程的控制的, 而 Celluoid 是 Ruby 中的多线程模式 Actor 模式的实现,worker按照任务列表执行任务;
queue:队列用于区分任务并且让任务排队, Sidekiq 中将每一类的任务使用一个 queue 来...
ActiveJob :: Retry
这是活跃
开发中的Alpha库,因此API可能会更改。
ActiveJob的自动
重试功能。 只需在您的工作类别
中include
ActiveJob::Retry.new(strategy: :something, **options) :
class ProcessWebhook <
ActiveJob :: Base
queue_as :webhooks
# Constant delay between attempts:
include
ActiveJob :: Retry . new ( strategy : :constant ,
SidekiqUniqueJobs
该gem为sidekiq队列添加了唯一的约束。 通过获取队列名称,工作器类和作业的参数的哈希值的锁来实现唯一性。 默认情况下,只能获取给定哈希的一个锁。 当无法获取锁时发生的情况由所选的on_conflict策略控制。
这是master分支的文档。 您可以通过导航到每个版本的标签来找到其文档。
这是一些旧版本的链接
将此行添加到您的应用程序的Gemfile中:
gem 'sidekiq-unique-jobs'
然后执行:
bundle
添加中间件
在v7之前,中间件是自动配置的。 由于有些人报告了其他宝石的问题(请参阅 ),因此决定完全控制用户。
注意如果要使用收割机,则还需要配置服务器中间件。
Sidekiq . configure_server do | config |
config . redis = { url : ENV [ "REDIS_URL" ] , driver : :hiredis }
config . client_middleware do | chain |
chain
多个后台作业库(如 Resque、S
idekiq 和 Delayed
Job)的简单界面。
在这个每隔一段时间发布一个新的异步作业处理库的狂野世界
中,Qe 试图保持一个与最著名的库一起工作的统一接口:
要设置适配器,只需根据您的适配器加载文件:
require "qe/resque"
require "qe/qu"
require "qe/delayed_
job"
require "qe/beanstalk"
您还需要 require 将要使用的库。 如果您将 Rails 与 Bundler 一起使用,您可以简单地要求正确的文件和依赖项。
source :
rubygems
gem "rails" , "3.2.8"
gem "s
idekiq"
gem "qe" , :require => "qe/s
idekiq"
gem "resque"
gem "qe" ,
消息处理的扩展,以跟踪您的作业。 受到启发,主要是使用Sidekiq的中间件复制其功能。
与ActiveJob完全兼容。
支持最新版本的Sidekiq并一直支持3.x。
将此行添加到应用程序的Gemfile中:
gem 'sidekiq-status'
然后执行:
$ bundle
或将其自己安装为:
gem install sidekiq-status
(可选)添加
(可选)启用对支持
要使用,请将sidekiq-status添加到中间件链。 有关更多信息,请参见Sidekiq Wiki上的。
require 'sidekiq'
require 'sidekiq-status'
Sidekiq . configure_client do | config |
# accepts :expiration
本篇介绍sidekiq基于redis队列的后端的异步任务处理,当然还有定时任务,延时处理等功能。
https://github.com/mperham/sidekiq/wiki
http://mperham.github.com/sidekiq/
sidekiq的宣传语:
What if 1 Sidekiq process could do the work of 20 Resqu...
SidekiqSidekiq WikiSidekiq on GitHubCelluloidEpisode 271: ResqueEpisode 365: Thread-Safety (pro)
terminal
brew install redis
redis-server /usr/local/etc/redis.conf
bundle exec sidekiq
参考:https://github.com/mperham/sidekiq/wiki/Getting-Started
https://wdxtub.com/2016/07/06/sidekiq-guide/
使用sidekiq之前需要安装redis:参考redis安装
gem 'sidekiq'
rails g sidekiq:worker Hard # will create a...
ActiveJob 是 Rails 4.2 新加入的功能。这个东西在beta阶段rubyChina就已经有很多高手关注了,无奈自己的项目使用的是4.1.5,升级到4.2 的时候其他gem又有很多依赖有问题,所以没在第一时间使用。今天补个课。
ActiveJob 是Rails自己开发运行后台程序的模块,常用于执行运行时间可能很长的工作(比如发送注册邮件