Ruby Sidekiq 如何指定特定的任务到特定的 worker 机器上执行

chenshuilong · 2021年12月01日 · 最后由 zj0713001 回复于 2021年12月09日 · 746 次阅读

现在的情况是这样的,我这边有 10 台 sidekiq 后台集群,每一台 worker 都有一个域名,任务都是随机分配到每台机器上执行的。

现在需要将特定的一些任务推送到某台 worker 机器上执行,请问各位大佬该如何操作?

补充说明: sidekiq 5.1.3 ruby. 2.4.4 rails. 4.2.10

需要在部署上做点手脚,不同的 worker 指定不同的处理队列 https://github.com/mperham/sidekiq/wiki/Advanced-Options#queues

martin91 回复

看了之后还是有点不懂,如何动手脚呢,可以请大佬指点一下么

为什么会有这个需求呢?在哪一台处理任务不都一样的吗?

可以使用不同的 queue 之后 sidekiq 启动的时候 只消耗特定的 queue 即可

pynix 回复

在高并发的时候会遇到 例如某个任务要保证 20 个并发 同时不能靠优先级只跑自己的 worker 其他的 worker 也得进行 混合的 queue 并不能保证单独某一个 worker 的并发是稳定的

zj0713001 回复

将有特殊需求的任务放到一个独立的 queue 不就行了,启动服务的时候指定对应的 sidekiq 配置就行了,然后你想开多少资源来处理这个任务都行,也不会影响到其他的任务

sidekiq -C config/sidekiq-import.yml

# config/sidekiq-import.yml
---
:concurrency: 10
:queues:
  - import
# job
class ImportJob < ApplicationJob
  queue_as :import

  def perform(task_id)
  end 
end 

每台机器上都会有 sidekiq.yml 分别配置一下就能制定当前的机器处理哪些 queue

ping94 回复

你说的就是我说的 你这就是单独的 queue 不是混合的 queue

需要 登录 后方可回复, 如果你还没有账号请 注册新账号