Используя очереди важно помнить, что задачи ставятся в очередь и извлекаются из нее в разных процессах. Поэтому, при обработке задания, избегайте использования внешних зависимостей, когда не уверены в том, что они будут доступны в том окружении, где работает воркер.
Все данные, необходимые для выполнения задания, нужно оформлять в виде свойств Вашего job-объекта, и отправлять в очередь вместе с ним.
Если в задании нужно работать с моделью ActiveRecord
, вместо самой модели передавайте ее ID. А в
момент выполнения извлекайте ее из базы данных.
Например:
Yii::$app->queue->push(new SomeJob([
'userId' => Yii::$app->user->id,
'bookId' => $book->id,
'someUrl' => Url::to(['controller/action']),
]));
Класс задания:
class SomeJob extends Object implements \zhuravljov\yii\queue\Job
{
public $userId;
public $bookId;
public $someUrl;
public function run()
{
$user = User::findOne($this->userId);
$book = Book::findOne($this->bookId);
//...
}
}