【发布时间】:2021-08-14 00:27:19
【问题描述】:
我正在使用 Sidekiq 中的并发功能,并想确认 Sidekiq::Limiter 是否被调用。我收到以下错误:
Failures:
1) Op::QueueProcessing#perform concurrency is concurrent per client
Failure/Error: expect(Sidekiq::Limiter).to have_received(:unlimited)
(Sidekiq::Limiter).unlimited(*(any args))
expected: 1 time with any arguments
received: 0 times with any arguments
# ./spec/workers/op/queue_processing_spec.rb:24:in `block (4 levels) in <top (required)>'
# ./spec/support/timezone.rb:9:in `block (3 levels) in <top (required)>'
# ./spec/support/timezone.rb:9:in `block (2 levels) in <top (required)>'
工人阶级:
# frozen_string_literal: true
module Op
class QueueProcessing
include Sidekiq::Worker
def self.throttle
return Sidekiq::Limiter.unlimited if Rails.env.test?
Sidekiq::Limiter.concurrent(
'analytics',
1,
wait_timeout: 5,
lock_timeout: 120
)
end
LIMITER = throttle
def perform
uploaded_submissions = OnClaimsSubmission.uploaded_submissions
uploaded_submissions.each do |submission|
LIMITER.within_limit do
Op::ProcessDownloadedFiles.perform_async(*submission)
end
end
end
end
end
测试:
# frozen_string_literal: true
require 'rails_helper'
describe Op::QueueProcessing do
describe '#perform' do
let(:job) { described_class.new }
context 'concurrency' do
before do
allow(Sidekiq::Limiter).to receive(:unlimited)
job.perform
end
it 'is concurrent per client' do
expect(Sidekiq::Limiter).to have_received(:unlimited)
end
end
end
end
【问题讨论】: