Effacer la file d'attente sidekiq


93

J'ai cet ouvrier qui court pour toujours.

class Worker
  include Sidekiq::Worker
  sidekiq_options queue: "infinity", retry: true

  def perform(params)
    # ...
    self.class.perform_in(30.seconds, params)
  end
end

Le problème est que je charge les ouvriers au démarrage, comme ça. config/initializers/load_workers.rb

Rails.application.config.after_initialize do  
  if ENV["SIDEKIQ"] == "1"
    Worker.perform_async({})
  end
end

Utiliser ceci pour démarrer sidekiq SIDEKIQ=1 sidekiq --verbose --environment production -C config/sidekiq.yml.

Cela signifie que les anciens travailleurs doivent s'arrêter, à la fois ceux en cours d'exécution mais aussi ceux en cours de rééchelonnement.

J'ai essayé de l'exécuter au démarrage (juste avant de charger de nouvelles œuvres), mais cela n'a pas fonctionné.

q = []
q += Sidekiq::RetrySet.new.select { |job| job.klass.match(/Worker/) }
q += Sidekiq::Queue.new("infinity").select { |job| job.klass.match(/Worker/) }
q += Sidekiq::ScheduledSet.new.select { |job| job.klass.match(/Worker/) }
q.each(&:delete)

Après les déploiements 5-ish, il y a un tas de travailleurs en double dans la file d'attente prévue pour plus tard. Alors, y a-t-il un moyen de vider tout dans une file d'attente et d'empêcher les travaux déjà en cours de replanifier?

J'utilise sidekiq 3.0.


Voulez-vous supprimer une file d'attente ou un travail planifié. ou mieux pour dire travail planifié en double.
— Sabyasachi Ghosh

Je souhaite supprimer toutes les traces d'un travail avant de charger le nouveau travailleur.
— Linus Oleander

ok obtenu votre problème .. signifie que vous souhaitez supprimer tous les travaux planifiés.
— Sabyasachi Ghosh

@haSabyasachiGhosh Non, je veux supprimer tout ce qui est lié à une file d'attente, pas seulement les travaux planifiés. En d'autres termes; les travaux échoués, en cours, en attente et planifiés doivent être supprimés.
— Linus Oleander

Toute l'aide est ici - github.com/mperham/sidekiq/wiki/API
— viks

Réponses:


161

Supprime tous les travaux d'une file d'attente en supprimant la file d'attente.

require 'sidekiq/api' # for the case of rails console

Sidekiq::Queue.new("infinity").clear
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear

Peut-être que Sidekiq Pro vous aidera.
— Ranjithkumar Ravi

5
Voici pour effacer les compteurs, Sidekiq::Stats.new.resetje découvre que cela aide

14
Pour effacer la file d'attente par défaut / première:Sidekiq::Queue.all.first.clear
— user456584

1
Sidekiq :: Queue.new ("rapports"). Clear et Sidekiq :: Queue.new ("alertes"). Clear permet d'effacer la file d'attente actuelle. Mais qu'en est-il Busy? Comment effacer les tâches "Occupé"?
— Donato

31
Effacez-les tous avecSidekiq::Queue.all.each &:clear
— Marco Lazzeri

95

Cela a fait l'affaire pour moi:

Sidekiq::Queue.all.each(&:clear)
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear
Sidekiq::DeadSet.new.clear

1
Merci, cela a fonctionné comme un charme, j'étais dans une urgence haha, l'acolyte était avec waaaaaay trop de travailleurs dans la file d'attente cela a fonctionné comme je kill
— m'y

Parfait, juste en ajoutant que dans mon env, je devais require 'sidekiq/api'travailler sur console.
— bonafernando le

19

Fonctionne pour moi pour la plupart des versions de sidekiq:

Sidekiq::RetrySet.new.clear

Sidekiq::ScheduledSet.new.clear

Effacer les statistiques (facultatif)

Sidekiq::Stats.new.reset

Cela vide toute la base de données, pas seulement la file d'attente.
— Linus Oleander

si va vider toute la base de données de sidekiq, et fonctionnera bien dans la console rails
— vidur punj

-2

Vous pouvez effacer votre file d'attente en exécutant ce code bien qu'il y ait des méthodes intégrées.

queue = Sidekiq::Queue.new
queue.each do |job|
  job.delete 
end

Eh bien, cela devrait fonctionner car nous avons récupéré tous les travaux de la file d'attente, puis les avons supprimés un par un.
— Asad Hameed

Non, ce n'est pas le cas. Jetez un œil aux réponses existantes. C'est aussi un double de la réponse existante.
— Linus Oleander

Je ne sais pas de quoi tu parles. Pouvez-vous s'il vous plaît me montrer la même réponse que j'ai publiée?
— Asad Hameed
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.