当 perform_async 被调用但 sidekiq 不是 运行 时会发生什么?

What happends when a perform_async is called but sidekiq is not running?

我想知道当一个工人调用 perform_async 但 sidekiq (bundle exec sidekiq) 不是 运行 时会发生什么?

在我的应用程序中,我有一些观察者要求 sidekiq 在我的一个模型被触发时执行一项工作(即在某些情况下创建、更新或销毁)。

我还有一个 rake 任务,它根据我拥有的一些数据为我构建一个数据库。当这个任务是 运行 时,它会创建几个记录来触发我的观察者,然后观察者将作业推送到 sidekiq 队列中。

出于测试目的,我 运行 这个任务没有打开 sidekiq,它工作正常,我的数据被推送到 mysql !

我知道问问自己,我的观察员告诉我的工人要做的工作发生了什么?它还完成了吗?它完成但不是异步的吗? 完成了吗?

简单回答:还没有完成。稍后再做

正如它自己所说的那样,它把它放在 que 中。当您打开 sidekiq 时,它将从 que 读取所有数据并执行所有任务。

但要实现此功能,您需要 Redis 正常工作。 Redis负责在一个que中保存数据,是一种内存。没有 Redis 你会得到一个错误。