如何排队不存在的工作者

问题描述 投票:0回答:1

我正在尝试排队一个Sidekiq工作者,该工作人员在我的项目中不存在,但存在于共享同一个redis服务器的其他项目中。

在我们目前的情况下,我们有两台服务器:

  • API服务器在Heroku上运行。 REST API的Web实例和Sidekiq的工作者监听:api队列。
  • 处理服务器在AWS ElasticBeanstalk上运行,其中puma实例运行带有Sinatra的REST Full API。此实例运行Sidekiq并侦听队列:processing

旁注:最初,我们的API正在完成所有工作,但是当一些工作人员开始占用太多内存时,我们切换到处理服务器。


当我们需要在处理服务器上执行作业时,我们会发生以下操作:

  1. API调用POST processing.com/some_job
  2. 处理队列SomeJobWorker上的队列processing
  3. 处理从队列SomeJobWorker执行processing
  4. 处理调用POST api.com/webhooks/some_job_result
  5. API在队列SomeJobResultWorker上排队api
  6. API从队列SomeJobResultWorker执行processing

这让我想到如果我能以某种方式,从API服务器直接队列SomeJobWorker然后我可以摆脱我们的处理服务器上的REST API。

...然后我可以摆脱API服务器上的webhooks端点,并从处理服务器执行相同的操作

我最终会得到这样的东西:

  1. API调用队列SomeJobWorker
  2. 处理执行SomeJobWorker
  3. 处理队列SomeJobResultWorker
  4. API执行SomeJobResultWorker

有没有办法让我排队在我的本地代码库中不存在的工作者?

ruby-on-rails ruby sidekiq
1个回答
1
投票

你有两个碎片。每个Redis都是一个碎片。阅读本页:

https://github.com/mperham/sidekiq/wiki/Sharding

您可以使用类名推送作业:

client = Sidekiq::Client.new(PROCESSING_REDIS)
client.push('queue' => 'api', 'class' => 'FooWorker', 'args' => [1,2,"foo"])
© www.soinside.com 2019 - 2024. All rights reserved.