Sidekiq服务器进程如何从Redis队列中提取作业?

Har*_*ren 6 ruby-on-rails redis sidekiq

我有两个 Rails 应用程序在两个不同的实例上运行(比如说Server1Server2),但它们具有相似的代码并共享相同的 Postgresql DB。

我安装了 Sidekiq 并从两台服务器推送队列中的作业,但我仅在Server1.

我有一个 Redis 服务器,它在 Server1 上运行,与 Server2 共享 Redis。

如果从 Server2 推送一个作业,它会在 Server1 的 Sidekiq 进程中进行处理,这就是我真正想要的。

我的问题是

  • Server1 上的 Sidekiq 进程如何知道作业已推送到 Redis 中?

  • Sidekiq 进程是否持续检查 Redis 服务器上是否有新作业,或者 Redis 服务器是否向 Sidekiq 进程暗示新作业?

我对此感到困惑和惊讶!

谁能澄清一下 Sidekiq 从 Redis 服务器获取作业的流程吗?

对于像我这样的新手会有帮助。

Ser*_*sev 3

Sidekiq使用名为BRPOP的 redis 命令。

此命令从列表(即您的作业队列)中获取一个元素。如果列表为空,它会等待元素出现,然后弹出/返回它。这也适用于同时多个队列。

所以不,sidekiq 不会轮询 redis,redis 也不会向 sidekiq 推送通知。