Sidekiq Unique Jobs 使用教程

Sidekiq Unique Jobs 使用教程

sidekiq-unique-jobs Prevents duplicate Sidekiq jobs 项目地址: https://gitcode.com/gh_mirrors/si/sidekiq-unique-jobs

1. 项目介绍

sidekiq-unique-jobs 是一个用于 Sidekiq 的 Ruby gem,旨在防止 Sidekiq 作业的重复执行。通过在 Redis 中创建一组基于队列、类和参数的键,该 gem 确保在给定的作业哈希中只能获取一个锁。当无法获取锁时,可以通过选择的冲突策略来处理。

2. 项目快速启动

安装

首先,将以下行添加到你的应用程序的 Gemfile 中:

gem 'sidekiq-unique-jobs'

然后执行:

bundle

配置中间件

config/initializers/sidekiq.rb 文件中配置中间件:

require "sidekiq-unique-jobs"

Sidekiq.configure_server do |config|
  config.redis = { url: ENV["REDIS_URL"], driver: :hiredis }
  config.client_middleware do |chain|
    chain.add SidekiqUniqueJobs::Middleware::Client
  end
  config.server_middleware do |chain|
    chain.add SidekiqUniqueJobs::Middleware::Server
  end
  SidekiqUniqueJobs::Server.configure(config)
end

Sidekiq.configure_client do |config|
  config.redis = { url: ENV["REDIS_URL"], driver: :hiredis }
  config.client_middleware do |chain|
    chain.add SidekiqUniqueJobs::Middleware::Client
  end
end

创建你的第一个 Worker

使用 :until_executed 锁类型创建一个 Worker:

# frozen_string_literal: true

class UntilExecutedWorker
  include Sidekiq::Worker
  sidekiq_options lock: :until_executed

  def perform
    logger.info("cowboy")
    sleep(1) # 模拟复杂处理
    logger.info("beebop")
  end
end

3. 应用案例和最佳实践

防止重复作业

在某些场景下,你可能希望防止同一作业在短时间内多次执行。例如,对于一个需要定期执行的任务,你可以使用 :until_executed 锁来确保每次任务只执行一次。

class DailyTaskWorker
  include Sidekiq::Worker
  sidekiq_options lock: :until_executed

  def perform
    # 每日任务逻辑
  end
end

处理长时间运行的作业

对于需要长时间运行的作业,可以使用 :until_expired 锁来确保作业在一定时间内不会重复执行。

class LongRunningTaskWorker
  include Sidekiq::Worker
  sidekiq_options lock: :until_expired, lock_ttl: 1.day

  def perform
    # 长时间运行任务逻辑
  end
end

4. 典型生态项目

Sidekiq

sidekiq-unique-jobs 是 Sidekiq 的一个扩展,Sidekiq 是一个用于 Ruby 的后台作业处理系统。Sidekiq 使用 Redis 来存储作业队列,并提供了强大的并发处理能力。

Redis

Redis 是一个开源的内存数据结构存储,用作数据库、缓存和消息代理。sidekiq-unique-jobs 依赖 Redis 来存储和管理作业的唯一性锁。

Ruby

Ruby 是一种动态、开源的编程语言,以其简洁性和生产力而闻名。sidekiq-unique-jobs 是一个 Ruby gem,适用于任何使用 Ruby 和 Sidekiq 的项目。

通过以上步骤,你可以快速上手并使用 sidekiq-unique-jobs 来防止 Sidekiq 作业的重复执行,提高系统的稳定性和可靠性。

sidekiq-unique-jobs Prevents duplicate Sidekiq jobs 项目地址: https://gitcode.com/gh_mirrors/si/sidekiq-unique-jobs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岑晔含Dora

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值