我正在尝试排队一个Sidekiq工作者,该工作人员在我的项目中不存在,但存在于共享同一个redis服务器的其他项目中。
在我们目前的情况下,我们有两台服务器:
:api
队列。:processing
旁注:最初,我们的API正在完成所有工作,但是当一些工作人员开始占用太多内存时,我们切换到处理服务器。
当我们需要在处理服务器上执行作业时,我们会发生以下操作:
POST processing.com/some_job
SomeJobWorker
上的队列processing
SomeJobWorker
执行processing
POST api.com/webhooks/some_job_result
SomeJobResultWorker
上排队api
SomeJobResultWorker
执行processing
这让我想到如果我能以某种方式,从API服务器直接队列SomeJobWorker
然后我可以摆脱我们的处理服务器上的REST API。
...然后我可以摆脱API服务器上的webhooks
端点,并从处理服务器执行相同的操作
我最终会得到这样的东西:
SomeJobWorker
SomeJobWorker
SomeJobResultWorker
SomeJobResultWorker
有没有办法让我排队在我的本地代码库中不存在的工作者?
你有两个碎片。每个Redis都是一个碎片。阅读本页:
https://github.com/mperham/sidekiq/wiki/Sharding
您可以使用类名推送作业:
client = Sidekiq::Client.new(PROCESSING_REDIS)
client.push('queue' => 'api', 'class' => 'FooWorker', 'args' => [1,2,"foo"])