从单独的进程调用 sidekiq worker

Call sidekiq worker from separate process

我在rails项目目录下有一个普通的sidekiq worker。它应该作为侦听器工作,并在每次新数据出现在 RabbitMQ 队列中时触发。为了优化项目,决定将 RabbitMQ 中的消息监听移动到一个单独的进程中,并从那里调用主项目中的一个 worker。

问题是如何将任务从单独的进程发送到 rails sidekiq 项目?

或者如果您有其他实现方法的想法,请告诉我

Sidekiq 通过其在 Redis 中的队列管理任务。只要两个进程都在与同一个 Redis 实例对话,这应该就可以了。

以下是将作业推送到 Sidekiq 可以理解的 Redis 的方法:

require 'securerandom'
require 'json'

redis = Redis.new(:url => 'redis://hostname:port/db')
msg = { "class" => 'MyWorker',
    "queue" => 'default',
    "args" => [1, 2, 3],
    'retry' => true,
    'jid' => SecureRandom.hex(12),
    'created_at' => Time.now.to_f,
    'enqueued_at' => Time.now.to_f }
redis.lpush("queue:default", JSON.dump(msg))

https://github.com/mperham/sidekiq/wiki/FAQ#how-do-i-push-a-job-to-sidekiq-without-ruby