从单独的进程调用 sidekiq worker



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

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

或者,如果您有其他想法如何实现这一点,请告诉我

以下是将 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

Sidekiq通过其队列管理任务,该队列位于Redis中。只要两个进程都与同一个 Redis 实例通信,这应该就可以工作。

最新更新