如何排队一个不存在的工人

How to queue a non-existing worker

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

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

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


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

  1. API 调用 POST processing.com/some_job

  2. 正在处理队列 SomeJobWorker 队列 processing

  3. 处理从队列processing

  4. 执行SomeJobWorker
  5. 处理调用POST api.com/webhooks/some_job_result

  6. API 排队 SomeJobResultWorker 排队 api

  7. API 从队列 processing

  8. 执行 SomeJobResultWorker

这让我想到,如果我能以某种方式从 API 服务器 直接排队 SomeJobWorker 那么我就可以摆脱 REST API 在我们的 处理服务器上 .

...然后我可以摆脱 API 服务器 上的 webhooks 端点并从 做同样的事情处理服务器

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

  1. API 调用队列 SomeJobWorker

  2. 处理执行SomeJobWorker

  3. 正在处理队列SomeJobResultWorker

  4. 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"])