2016-10-19 17 views
2

Sidekiq debounce을 사용하여 시간대의 작업 수를 제한합니다. 여기 내 직업 :레일 : 내 미들웨어 체인에 Sidekiq :: Debounce를 추가하는 방법

내가 작업을 호출
class CalculateAllEventRankingsForUser 
    include Sidekiq::Worker 
    sidekiq_options debounce: true 

    def perform(user_id) 
    puts "recalculating all events for user" 
    ## do some work 
    end 

end 

:

CalculateAllEventRankingsForUser.perform_in(20.seconds, self.id) 

그리고 내 sidekiq 이니셜 :

Sidekiq.configure_server do |config| 
    config.client_middleware do |chain| 
    chain.add Sidekiq::Debounce 
    end 
    config.server_middleware do |chain| 
    chain.add Sidekiq::Debounce 
    end 
end 

문제는 내 모든 sidekiq 작업이 여전히 심지어 처리되고 있다는 것입니다 20 초 내에 여러 번 발사하면됩니다. 내 의도는 매 20 초 (최대)마다 하나의 작업 만 해고하는 것입니다. 워드 프로세서

:

는 클라이언트 미들웨어 체인에 Sidekiq :: 디 바운스를 추가 한 다음 sidekiq_options 디 바운스를 추가 : 당신이 진동을 소거하고자하는 근로자에 ​​충실.

#perform_async 대신 #perform_in을 사용하여 시간대를 설정하십시오.

가장 중요한 것은 Sidekiq :: Debounce를 내 미들웨어 체인에 추가하는 방법입니다. 내가 그 일을 제대로하고 있는지 확실하지 않습니다.

해결 방법에 대한 아이디어가 있으십니까?

+0

을 당신은 같은 질문을 대신 이전 문제에 이전 답을 계속 읽어 : http://stackoverflow.com/questions/40119004/rails-sidekiq-confused-about-debounce/40119327? noredirect = 1 # comment67509958_40119327 –

+0

안녕하세요. @SergeyMoiseev. 이전 답변에서 귀하의 솔루션을 구현했습니다. 이것은보다 구체적인 세부 사항과는 다른 질문입니다. 나는 debounce가 이상적인 해결책이되도록 내 코드를 다시 작성했다. 하지만 Sidekiq :: Debounce를 미들웨어 체인에 추가하는 방법을 잘 모르겠습니다. 지금 당장은 sidekiq-debounce를 구현하려고하지만 모든 작업이 계속 실행 중입니다. –

+0

어떤 버전의 siqekiq를 사용하십니까? –

답변

0

sidekiq-debounce은 sidekiq 4.2와 호환됩니다. 그 이유는 공유 한 코드에 클라이언트 미들웨어가 구성된 방식 때문일 가능성이 큽니다.

이 작동합니다 :

Sidekiq.configure_server do |config| 
    config.server_middleware do |chain| 
    chain.add Sidekiq::Debounce 
    end 
end 

Sidekiq.configure_client do |config| 
    config.client_middleware do |chain| 
    chain.add Sidekiq::Debounce 
    end 
end