如何排队一个不存在的工人
How to queue a non-existing worker
我正在尝试将我的项目中不存在但存在于共享同一 redis 服务器的其他项目中的 Sidekiq worker 排队。
在我们目前的情况下,我们有两个服务器:
API server 在 Heroku 上运行。 REST API 的 Web 实例和带有 Sidekiq 的 worker 正在监听 :api
队列。
处理服务器 在 AWS ElasticBeanstalk 上运行,带有 puma 实例 运行 REST Full API with Sinatra。此实例运行 Sidekiq 并监听队列 :processing
旁注:一开始,我们的 API 完成了所有工作,但由于一些工作人员开始占用过多内存,我们切换到处理服务器。
当我们需要在处理服务器上执行作业时,我们会发生这些操作:
API 调用 POST processing.com/some_job
正在处理队列 SomeJobWorker
队列 processing
处理从队列processing
执行SomeJobWorker
处理调用POST api.com/webhooks/some_job_result
API 排队 SomeJobResultWorker
排队 api
API 从队列 processing
执行 SomeJobResultWorker
这让我想到,如果我能以某种方式从 API 服务器 直接排队 SomeJobWorker
那么我就可以摆脱 REST API 在我们的 处理服务器上 .
...然后我可以摆脱 API 服务器 上的 webhooks
端点并从 做同样的事情处理服务器
我最终会得到这样的结果:
API 调用队列 SomeJobWorker
处理执行SomeJobWorker
正在处理队列SomeJobResultWorker
API执行SomeJobResultWorker
有没有办法让我的本地代码库中不存在的工作人员排队?
你有两个分片。每个 Redis 都是一个分片。阅读此页:
https://github.com/mperham/sidekiq/wiki/Sharding
您可以使用 class 名称推送作业:
client = Sidekiq::Client.new(PROCESSING_REDIS)
client.push('queue' => 'api', 'class' => 'FooWorker', 'args' => [1,2,"foo"])
我正在尝试将我的项目中不存在但存在于共享同一 redis 服务器的其他项目中的 Sidekiq worker 排队。
在我们目前的情况下,我们有两个服务器:
API server 在 Heroku 上运行。 REST API 的 Web 实例和带有 Sidekiq 的 worker 正在监听
:api
队列。处理服务器 在 AWS ElasticBeanstalk 上运行,带有 puma 实例 运行 REST Full API with Sinatra。此实例运行 Sidekiq 并监听队列
:processing
旁注:一开始,我们的 API 完成了所有工作,但由于一些工作人员开始占用过多内存,我们切换到处理服务器。
当我们需要在处理服务器上执行作业时,我们会发生这些操作:
API 调用
POST processing.com/some_job
正在处理队列
SomeJobWorker
队列processing
处理从队列
processing
执行处理调用
POST api.com/webhooks/some_job_result
API 排队
SomeJobResultWorker
排队api
API 从队列
processing
执行
SomeJobWorker
SomeJobResultWorker
这让我想到,如果我能以某种方式从 API 服务器 直接排队 SomeJobWorker
那么我就可以摆脱 REST API 在我们的 处理服务器上 .
...然后我可以摆脱 API 服务器 上的 webhooks
端点并从 做同样的事情处理服务器
我最终会得到这样的结果:
API 调用队列
SomeJobWorker
处理执行
SomeJobWorker
正在处理队列
SomeJobResultWorker
API执行
SomeJobResultWorker
有没有办法让我的本地代码库中不存在的工作人员排队?
你有两个分片。每个 Redis 都是一个分片。阅读此页:
https://github.com/mperham/sidekiq/wiki/Sharding
您可以使用 class 名称推送作业:
client = Sidekiq::Client.new(PROCESSING_REDIS)
client.push('queue' => 'api', 'class' => 'FooWorker', 'args' => [1,2,"foo"])