Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

202
Visualizações
Los trabajos únicos de Sidekiq con lock_expiration no funcionan según lo previsto

Tengo un problema con los trabajos únicos lock_expiration y sidekiq.

 gem 'sidekiq', '4.2.10' gem 'sidekiq-cron', '1.2.0' gem 'sidekiq-unique-jobs', '6.0.25'

Con las opciones de sidekiq de:

 sidekiq_options queue: :medium, retry: 3, lock: :until_executed, lock_expiration: 120 * 60

Cuando se ha ejecutado este trabajador:

 [1] pry(main)> HardWorker.perform_async => 53b93f122fddbb2ebd350332267484ea

El trabajo se completa porque la ejecución es un método vacío. El bloqueo sucede, es decir, veo esto en redis: Claves redis

Si la clave DISPONIBLE todavía existe en redis, es decir, antes de que expire el TTL de 5 segundos. Puedo poner en cola otro trabajo y continuar haciéndolo mientras actualice ese TTL y esa clave exista. Sin embargo, después de 5 segundos y esa clave caduca, no puedo poner en cola otro trabajo hasta que la clave EXISTE caduca.

Espero poder poner en cola otro trabajo después de que hayan pasado 5 segundos. Estoy bastante seguro de que la clave EXISTS debe eliminarse después de que el trabajo se complete correctamente. Pero esto no sucede. El trabajo se puede poner en cola, pero solo dentro del TTL de la clave DISPONIBLE.

Estoy en el proceso de actualizar sidekiq desde una versión muy antigua. Esto es todo lo que puedo hacer sin actualizar otras partes importantes del sistema.

Mi pregunta es, ¿es este el comportamiento previsto? Basado en la actualización que hemos hecho y la sustitución de los atributos de configuración. Debería funcionar como funcionaba antes. Es decir, poder poner en cola un trabajo después de completar el trabajo actual.

Suponiendo que esto sea un error o un comportamiento previsto. ¿Cómo puedo obtener este comportamiento?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Creo que su comprensión es correcta, y el bloqueo debería borrarse tan pronto como se haya llamado al método de perform del trabajador (según la semántica descrita para la estrategia until_executed en los documentos). Si eso no sucede, es posible que se encuentre con un error.

Sin embargo, la versión 6.x de sidekiq-unique-jobs es descrita por su autor como "the worst mistake I ever made as a software engineer" ( https://github.com/mhenrixon/sidekiq-unique-jobs/issues/553 #issuecomment-732719189 ) y "not stable" ( https://github.com/mhenrixon/sidekiq-unique-jobs/issues/553#issuecomment-733151792 ). Recomendaría actualizar al menos a 7.x antes de tirar más de tu cabello tratando de resolver este problema.

(Alternativamente, si es una opción, Sidekiq Enterprise viene con soporte de trabajos único que ha demostrado ser efectivamente a prueba de balas en mi experiencia).

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda