Ruby on rails 如何对不存在的工作人员排队

Ruby on rails 如何对不存在的工作人员排队,ruby-on-rails,ruby,sidekiq,Ruby On Rails,Ruby,Sidekiq,我正在尝试对我的项目中不存在但存在于共享同一redis服务器的其他项目中的Sidekiq worker进行排队 在我们目前的情况下,我们有两台服务器: API服务器在Heroku上运行。RESTAPI和worker的Web实例,其中Sidekiq正在侦听:API队列 Processing server在AWS ElasticBeanstalk上运行,puma实例使用Sinatra运行REST完整API。此实例运行Sidekiq并侦听队列:processing 旁注:一开始,我们的API做了所有的

我正在尝试对我的项目中不存在但存在于共享同一redis服务器的其他项目中的Sidekiq worker进行排队

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

API服务器在Heroku上运行。RESTAPI和worker的Web实例,其中Sidekiq正在侦听:API队列

Processing server在AWS ElasticBeanstalk上运行,puma实例使用Sinatra运行REST完整API。此实例运行Sidekiq并侦听队列:processing

旁注:一开始,我们的API做了所有的工作,但由于一些工作人员开始占用太多内存,我们切换到处理服务器

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

API调用POST processing.com/some\u作业

正在处理队列队列处理上的JobWorker

Processing从队列处理中执行SomeJobWorker

处理调用POST api.com/webhooks/some\u job\u result

API在队列API上对SomeJobResultWorker进行队列

API从队列处理执行SomeJobResultWorker

这让我想到,如果我能够以某种方式,从API服务器直接将某个JobWorker排队,那么我就可以在处理服务器上摆脱RESTAPI

。。。然后,我可以在API服务器上删除webhooks端点,并在处理服务器上执行同样的操作

我最终会得到这样的结果:

API调用JobWorker队列

处理执行某些JobWorker

处理队列SomeJobResultWorker

API执行SomeJobResultWorker


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

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

可以使用类名推送作业:

client = Sidekiq::Client.new(PROCESSING_REDIS)
client.push('queue' => 'api', 'class' => 'FooWorker', 'args' => [1,2,"foo"])

我标记为它解决了我的问题,因为你的Client.new似乎正是我想要的,我不知道我怎么没有自己弄明白…关于切分,它似乎允许相同的代码库使用2个不同的redis服务器,并平衡到哪里去了。在我的示例中,我希望两个不同的基本代码共享同一个redis服务器,只要它们不共享任何队列,这可能会起作用,但官方不支持。不同的代码库应该有不同的Redis配置,以便它们的数据在物理上是不同的,就像它们的代码一样。