07/09/2018, 09:26

Sidekiq Advanced Options

File config sidekiq là 1 file YAML, sidekiq server sử dụng nó để tự cấu hình. Mặc định được đặt ở config/sidekiq.yml. Nó chỉ cần thiết nếu bạn muốn có những cài đặt nâng cao, ví dụ như cài đặtconcurrency size, khi có queue có tên khác default ... --- :concurrency: 5 staging: :concurrency: ...

File config sidekiq là 1 file YAML, sidekiq server sử dụng nó để tự cấu hình. Mặc định được đặt ở config/sidekiq.yml. Nó chỉ cần thiết nếu bạn muốn có những cài đặt nâng cao, ví dụ như cài đặtconcurrency size, khi có queue có tên khác default ...

---
:concurrency: 5
staging:
  :concurrency: 10
production:
  :concurrency: 20
:queues:
  - critical
  - default
  - low

Với cài đặt riêng cho từng môi trường, thì các cài đặt này sẽ ghi đè lên thông số mặc định ban đầu. Trong ví dụ trên thì concurrency size trên staging sẽ là 10, chứ không phải 5, tương tự trên production sẽ là 20.

Nếu bạn không để file config ở dạng mặc định thì khi chạy sidekiq cần thêm flag -c để chỉ định đường dần file:

sidekiq -C config/myapp_sidekiq.yml

Các tùy chọn được truyền trên dòng lệnh cũng sẽ ghi đè các tùy chọn trong file config.

Mặc định sidekiq sử dụng một queue gọi là default trong Redis. Nếu bạn muốn sử dụng nhiều queue, bạn có thể chỉ định chúng trong tham số truyền vào khi khởi động sidekiq hoặc sửa trong file config. Mỗi queue có thể chỉ định trọng số. Queue có trọng số bằng 2 sẽ được check nhiều lần gấp đôi queue có trọng số bằng 1.

Tham số:

sidekiq -q critical,2 -q default

File config:

# ...
:queues:
  - [critical, 2]
  - default

Nếu bạn muốn queue luôn được xử lý theo một thứ tự cụ thể thì chỉ cần khai báo chúng theo thứ tự mà không cần trọng số.

Tham số:

sidekiq -q critical -q default -q low

File config:

# ...
:queues:
  - critical
  - default
  - low

Nếu muốn các queue có độ ưu tiên ngẫu nhiên thì có thể khai báo tên queue kèm tất cả các trọng số đều là 1.

# ...
:queues:
  - ["foo", 1]
  - ["bar", 1]
  - ["xyzzy", 1]

Tên của queue có thể chỉ định trong worker:

class ImportantWorker
  include Sidekiq::Worker
  sidekiq_options queue: 'critical'

  def perform(*important_args)
    puts "Doing critical work"
  end
end

Reserved Queues

Nếu bạn muốn dành riêng một queue để xử lý một việc nhất định, cách đơn giản nhất là chạy 2 sidekiq riêng rẽ, mỗi cái xử lý một hàng đợi khác nhau:

sidekiq -q critical # Only handles jobs on the "critical" queue
sidekiq -q default -q low # Handles the other jobs

Sidekiq có các options sau cho worker:

  • queue: sử dụng hàng đợi có tên cho worker này, mặc định là default.
  • retry: kích hoạt RetryJobs cho worker này, mặc định là true.
  • backtrace: dùng để lưu lại lỗi khi retry để hiển thị trên giao diện web, có thể là true, false, hoặc là 1 số integer để chỉ định số dòng được save. Mặc định là false.
class HardWorker
  include Sidekiq::Worker
  sidekiq_options :queue => :crawler, :retry => false, :backtrace => true
  
  def perform(name, count)
  end
end

Các options của worker có thể set bằng Sidekiq.default_worker_options=

Sidekiq.default_worker_options = { 'backtrace' => true }

Hoặc cũng có thể ghi đè ghi gọi worker đó:

HardWorker.set(:queue => :critical).perform_async(name, count)

Bạn có thể điều chỉnh số luồng đồng thời trong sidekiq của bạn. Mặc định thì sẽ một tiến trình sidekiq sẽ có 10 luồng. Bạn có thể điều chỉnh nó lên hoặc xuống:

sidekiq -c 5

Lưu ý không đặt số luồng lớn hơn 50, vì đã có lỗi xảy ra khi chạy cùng lúc 100 luồng.

Nguồn

https://github.com/mperham/sidekiq/wiki/Advanced-Options

0