Lors de l'introduction de sidekiq qui traite les travaux de manière asynchrone, si vous souhaitez le personnaliser pour votre propre application tout en profitant de la commodité, des paramètres utiles dans de tels cas C'est résumé.
sidekiq est une bibliothèque qui permet le traitement asynchrone. Lorsque vous exécutez plusieurs travaux en même temps, vous pouvez spécifier la priorité de traitement en séparant le nom de la file d'attente de chaque travail. Je pense qu'il existe des bibliothèques similaires telles que resque et delay_job. Il est facile à installer, mais il présente également des points gênants tels que réessayer la file d'attente bloquée 25 fois ou 26 fois par défaut, puis ne pas pouvoir voir le journal de la file d'attente qui s'exécutait en tant que DEAD. Il y a. Donc, dans cet article, je vais expliquer comment définir la limite supérieure sur DEAD sans réessayer lors de la levée d'une exception, puis définir le contenu de la file d'attente et lancer un message d'erreur sur slack.
Ruby 2.6.6 Rails 6.0.2 redis est requis pour sidekiq.
# On OSX
brew update
brew install redis
brew services start redis
Vous pouvez le vérifier sur le tableau de bord en ajoutant sidekiq-failures au gem, et vous pouvez même réessayer toutes les files d'attente ayant échoué.
gem 'sidekiq-failures'
Vous pouvez également vérifier les détails de l'erreur dans la liste des échecs.
Il semble qu'il existe de nombreux autres joyaux tels que la connaissance et l'analyse de la file d'attente lancée, je vais donc la publier pour référence.
Je pense que sidekiq avait une spécification qui tue la file d'attente après avoir réessayé environ 25 ou 6 fois par défaut. Donc, pour ceux qui veulent traiter un grand nombre de tâches à la fois, je n'ai pas à réessayer autant, alors j'ai essayé plusieurs fois et m'a dit si cela échouait. Décrivez dans le fichier.
app/jobs/your_job.rb
class YourJob < ActiveJob::Base
...
queue_as :default
sidekiq_options retry: 5
...
end
Avec cela, la file d'attente qui a échoué 5 fois devient la file d'attente MORTE.
Slack -coming-webhooks est un joyau qui facilite les notifications Slack dans les applications Rails.
gem 'slack-incoming-webhooks'
Obtenez l'URL de la chaîne à notifier [cette page](https://slack.com/intl/ja-jp/help/articles/115005265063-Slack-%E3%81%A7%E3%81%AE-Incoming-Webhook -Vérifier% E3% 81% AE% E5% 88% A9% E7% 94% A8).
Définir ce qu'il faut faire si la file d'attente meurt dans l'initialiseur (enregistrer l'URL du canal dans .env)
app/config/initializers/sidekiq.rb
Sidekiq.configure_server do |config|
config.death_handlers << ->(job, ex) do
slack = Slack::Incoming::Webhooks.new(ENV['SLACK_WEBHOOK_URL'])
attachments = [{
title: "Sidekiq failure",
text: "ONE DEAD JOB IS FOUND:\n (#{job['args']}) \n msg(#{job['error_message']})",
color: "#fb2489"
}]
slack.post "", attachments: attachments
end
end
Les files d'attente qui sont naturellement devenues MORT seront désormais notifiées par slack.
--Rescure_from Exception ne réessaye pas lorsque la notification est définie Puisqu'il s'agit d'un traitement d'exception, une fois que le travail est traité et qu'une erreur se produit, il est considéré comme mort et il vous informera de la marge mais ne réessaiera pas. Si, pour une raison quelconque, il n'est pas traité et que vous souhaitez toujours qu'il soit retenté, nous vous recommandons de définir des notifications de relâchement dans config.death_handlers comme décrit ci-dessus.