我習慣於使用delayed_jobs方法進入控制檯查看隊列中的內容,以及在需要時清除隊列的簡易性。 Sidekiq中有類似的命令嗎?謝謝!是否有控制檯命令來查看隊列中的內容以及清除Sidekiq中的隊列?
回答
我還沒有用過Sidekiq,所以它可能有隻是爲了觀看排隊的作業方法,但他們真的只是被包裝器Redis命令,因爲這基本上所有Sidekiq(和Resque)是:
# See workers
Sidekiq::Client.registered_workers
# See queues
Sidekiq::Client.registered_queues
# See all jobs for one queue
Sidekiq.redis { |r| r.lrange "queue:app_queue", 0, -1 }
# See all jobs in all queues
Sidekiq::Client.registered_queues.each do |q|
Sidekiq.redis { |r| r.lrange "queue:#{q}", 0, -1 }
end
# Remove a queue and all of its jobs
Sidekiq.redis do |r|
r.srem "queues", "app_queue"
r.del "queue:app_queue"
end
不幸的是,除去具體的工作是多一點困難,因爲你不得不復制其確切值:更容易通過redis-cli
# Remove a specific job from a queue
Sidekiq.redis { |r| r.lrem "queue:app_queue", -1, "the payload string stored in Redis" }
你可以做到這一切:
$ redis-cli
> select 0 # (or whichever namespace Sidekiq is using)
> keys * # (just to get an idea of what you're working with)
> smembers queues
> lrange queues:app_queue 0 -1
> lrem queues:app_queue -1 "payload"
解決方法是使用測試模塊(require'sidekiq/testing')並排除worker(MyWorker.drain)。
有一個符合人體工程學的API for viewing and managing queues。
默認情況下不需要。
require 'sidekiq/api'
下面是摘錄:
# get a handle to the default queue
default_queue = Sidekiq::Queue.new
# get a handle to the mailer queue
mailer_queue = Sidekiq::Queue.new("mailer")
# How many jobs are in the default queue?
default_queue.size # => 1001
# How many jobs are in the mailer queue?
mailer_queue.size # => 50
#Deletes all Jobs in a Queue, by removing the queue.
default_queue.clear
你也可以得到一些彙總統計。
stats = Sidekiq::Stats.new
# Get the number of jobs that have been processed.
stats.processed # => 100
# Get the number of jobs that have failed.
stats.failed # => 3
# Get the queues with name and number enqueued.
stats.queues # => { "default" => 1001, "email" => 50 }
#Gets the number of jobs enqueued in all queues (does NOT include retries and scheduled jobs).
stats.enqueued # => 1051
這是現在可以使用的方法(2016年8月)。接受的答案在2013年過時了。 –
沒有爲訪問有關人員,隊列和作業的實時信息的API。
這裏訪問https://github.com/mperham/sidekiq/wiki/API
有被絞死的'工人'在默認隊列中,我可以通過網絡界面看到他們。但他們無法從控制檯,如果我用Sidekiq :: Queue.new.size
irb(main):002:0> Sidekiq::Queue.new.size
2014-03-04T14:37:43Z 17256 TID-oujb9c974 INFO: Sidekiq client with redis options {:namespace=>"sidekiq_staging"}
=> 0
使用Redis的-CLI我能找到他們
redis 127.0.0.1:6379> keys *
1) "sidekiq_staging:worker:ip-xxx-xxx-xxx-xxx:7635c39a29d7b255b564970bea51c026-69853672483440:default"
2) "sidekiq_staging:worker:ip-xxx-xxx-xxx-xxx:0cf585f5e93e1850eee1ae4613a08e45-70328697677500:default:started"
3) "sidekiq_staging:worker:ip-xxx-xxx-xxx-xxx:7635c39a29d7b255b564970bea51c026-69853672320140:default:started"
...
的解決方案是:
irb(main):003:0> Sidekiq.redis { |r| r.del "workers", 0, -1 }
=> 1
在Sidekiq
另外V3存在命令
Sidekiq::Workers.new.prune
但由於某些原因,它並沒有爲我工作的那一天
如果你想清除sidekiq重試隊列,那就是:Sidekiq::RetrySet.new.clear
如果有任何計劃的作業。您可以使用以下命令刪除所有作業:
Sidekiq::ScheduledSet.new.clear
如果你想刪除您可以使用下面的命令所有作業的所有隊列:
Sidekiq::Queue.new.clear
重試作業可以通過以下被刪除命令還:
Sidekiq::RetrySet.new.clear
有在以下鏈接這裏有更多的信息,你可以退房: https://github.com/mperham/sidekiq/wiki/API
清晰所有sidekiq隊列Rake任務:
namespace :sidekiq do
desc 'Clear sidekiq queue'
task clear: :environment do
require 'sidekiq/api'
Sidekiq::Queue.all.each(&:clear)
end
end
用法:
rake sidekiq:clear
$ redis-cli
> select 0 # (or whichever namespace Sidekiq is using)
> keys * # (just to get an idea of what you're working with)
> smembers queues
> lrange queue:queue_name 0 -1 # (queue_name must be your relevant queue)
> lrem queue:queue_name -1 "payload"
除非您僅將redis僅用於sidekiq,否則請勿在生產中運行'鍵*'。特別是如果你有大數據集(緩存等),不要運行它。 Redis是單線程和'keys *'塊 - 這可能會導致大型數據集(幾個千兆位)幾分鐘的停機時間。 – timurb
- 1. 如何控制sidekiq隊列併發
- 2. 您是否可以清除Azure中的DeadLetter隊列
- 3. Sidekiq隊列重量限制
- 4. 是否可以從MQ隊列中刪除消息而不進行復制或清除隊列?
- 5. ActiveMQ - 通過命令行刪除/清除所有隊列
- 6. De-dupe Sidekiq隊列
- 7. Sidekiq隊列名稱
- 8. 來自jQuery的清除點擊隊列
- 9. Sidekiq的民主隊列
- 10. RabbitMQ:是否可以在隊列空時刪除隊列?
- 11. 是一個類似於命令隊列的消息隊列嗎?
- 12. 如何清除Jboss中的JMS隊列
- 13. 它是如何清除所有已經在隊列中排隊的任務的?
- 14. 清理隊列中所有其他請求的GCD隊列
- 15. Azure隊列:查找項目是否在隊列中
- 16. 清除Python控制檯的命令?
- 17. Sidekiq API是否不顯示所有可用的隊列?
- 18. C中的隊列隊列#
- 19. 如何查看整個隊列內容和自動隊列推出
- 20. 將仍在隊列中的工作重命名爲Sidekiq工人是否安全?
- 21. 是std ::隊列有事件機制(信號在std ::隊列中)
- 22. 隊列的反向內容
- 23. 查看sidekiq作業何時排隊[來自作業內]
- 24. 查看Pydev中的隊列項目debug
- 25. 如何查看隊列中的消息
- 26. 如何清除NiFi隊列?
- 27. JQuery清除隊列事件
- 28. jquery清除動畫隊列
- 29. 使用ncftp清除隊列
- 30. OpenCL多個有序命令隊列與單個無序隊列
你見過導入/遷移resque計劃作業到sidekiq的格式的好辦法?將sidekiq的名稱空間設置爲'resque'似乎並不能從我所知道的內容中找到預定的作業。謝謝! –
此處提供的某些解決方案已棄用。 –
@BrianArmstrong Sidekiq.redis {| r | r.zrange(「schedule」,0,-1,{withscores:true})}爲我工作,引用http://stackoverflow.com/questions/16009639/sidekiq-to-cancel-list-to-scheduled-jobs – Paul