Day08 - Gem-sidekiq-grouping 允许单个 sidekiq 处理多个相似(一样)的 jobs

前言

Allows identical sidekiq jobs to be processed with a single background call

上述引用自 sidekiq-grouping,能将多个同 queue 的 worker 整合成一个处理

说明

直接以情境举例,假如要打 API 更新第三方库存数量,由於更新商品数量有加也有减,因此先 grouped 起来,整合成一个 job 处理

实作

在 Gemfile 中加入该 sidekiq-grouping,范例可参考此 pr

# config/routes.rb
require "sidekiq/grouping/web"

---

# app/worker/flush_worker.rb
class FlushWorker
  include Sidekiq::Worker

  sidekiq_options(
  retry: false,
  batch_flush_size: 5,      # 当 Jobs 数量超过 5 个时,将合并作业
  batch_flush_interval: 30, # 每 30 秒合并作业一次
  batch_unique: true,       # 同参数是否要 unique,无指定预设为 false
  )

  def perform(groups = nil)
    puts "args: #{groups}"
    puts "execute #{self.class}"
  end
end

接着在 rails console 输入

# 当 batch_unique: true
10.times { FlushWorker.perform_async(1) }
# args: [[1]]


# 当 batch_unique: false or 没指定
10.times { FlushWorker.perform_async(1) }
# args: [[1], [1], [1], [1], [1]]


10.times { |t| FlushWorker.perform_async(t) }
# args: [[0], [1], [2], [3], [4]]
# args: [[5], [6], [7], [8], [9]]

batch_unique: true

batch_unique: false 或没写

Web UI

routes.rb 档案中加入 require "sidekiq/grouping/web"

小结

蛮好上手的一个 Gem,在 GitHub 的范例也写得浅显易懂,连测试也有范例,这边就不多加赘述

参考资料

  1. sidekiq-grouping GitHub
  2. sidekiq-grouping, 允许使用单个後台调用处理相同的sidekiq作业

铁人赛文章连结:https://ithelp.ithome.com.tw/articles/10264578
medium 文章连结:https://link.medium.com/0SSdkIm2Mjb
本文同步发布於 小菜的 Blog https://riverye.com/

备注:之後文章修改更新,以个人部落格为主


<<:  awk-2 Regex搭配浅谈

>>:  [从0到1] C#小乳牛 练成基础程序逻辑 Day 6 - Type Casting 显性/隐性转

行政调查(administrative investigation)

-证据大图 行政调查是内部调查。 调查(Investigation) 调查:调查或研究,检查与某事...

简单说回归 | ML#Day14

wiki 说明页:回归分析 想了解详细的说明,请见wiki或者其他参考资料。 或者也可以直接看下面,...

【JavaScript】样板字面值

【前言】 本系列为个人前端学习之路的学习笔记,在过往的学习过程中累积了很多笔记,如今想藉着IT邦帮忙...

一些档案格式

在Android 之中,档案类型是使用MIME (Multipurpose Internet Mai...

[Day3] Rust 函数 基本 / 进阶 使用

那麽最一开始学一个程序语言的起手式想必不用我多说吧。 「Hello World!」 fn hello...