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

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

现在的情况是这样的,我这边有 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

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