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
或没写在 routes.rb
档案中加入 require "sidekiq/grouping/web"
蛮好上手的一个 Gem,在 GitHub 的范例也写得浅显易懂,连测试也有范例,这边就不多加赘述
铁人赛文章连结:https://ithelp.ithome.com.tw/articles/10264578
medium 文章连结:https://link.medium.com/0SSdkIm2Mjb
本文同步发布於 小菜的 Blog https://riverye.com/
备注:之後文章修改更新,以个人部落格为主
>>: [从0到1] C#小乳牛 练成基础程序逻辑 Day 6 - Type Casting 显性/隐性转
-证据大图 行政调查是内部调查。 调查(Investigation) 调查:调查或研究,检查与某事...
wiki 说明页:回归分析 想了解详细的说明,请见wiki或者其他参考资料。 或者也可以直接看下面,...
【前言】 本系列为个人前端学习之路的学习笔记,在过往的学习过程中累积了很多笔记,如今想藉着IT邦帮忙...
在Android 之中,档案类型是使用MIME (Multipurpose Internet Mai...
那麽最一开始学一个程序语言的起手式想必不用我多说吧。 「Hello World!」 fn hello...