2016-09-29 8 views
0

Рекомендуется ли удалять или убивать неработающую работу внутри промежуточного программного обеспечения? Я не смог найти документацию по этому вопросу в вики. FWIW, я использую sidekiq-pro.Sidekiq удалять или убивать работу внутри промежуточного программного обеспечения

Одна вещь, которую я заметил, была, хотя у меня был правильный идентификатор работы, работа не была убита. Возможно ли, что задание sidekiq получает другой идентификатор, когда он находится в очереди?

STATUSES = { 
    canceled:  6, 
    failure:   9, 
    expired:   10 
}.freeze 

def call(worker, message, queue) 
    key = message['args'][0] 
    jid = message['jid'] 

    if key.present? 
    // status_id fetched from database 
    status_id = Req.find(key).status 

    if STATUSES.values.include?(status_id) 
     if killable?(message) 
     job = Sidekiq::RetrySet.new.find_job(jid) 
     // kill doesn't always succeed because job cannot be found 
     job.kill 
     end 
    end 
    end 
    yield 
end 

def killable?(message) 
    message.key?('retry_count') 
end 

ответ

1

Не нужно «убивать» работу, просто возвращайтесь вместо урожая. Работа будет безукоризненно успешной, не выполняя ничего. Вы можете использовать этот метод в качестве ссылки для отправки задания на Мертвую очередь:

https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/middleware/server/retry_jobs.rb#L151

+0

Спасибо за ответ Майка, мне было интересно, когда будет отображаться: D Но в данном случае мне нужно убить задание, потому что мы больше не хотим его в очереди повторных попыток. Это не удастся, если он получит эти статусы. – hyde

+0

А я получаю то, что вы говорите, так что это означает, что он также должен исчезнуть из очереди повторов. Я сделаю это и доложу вам. – hyde

+0

Задание переносится из набора повторов в очередь для выполнения. Нет ничего, чтобы удалить из набора повторов. –