Страница 1 из 1
Реализация очередей
Добавлено: 2020.04.14, 11:08
Tonni_regoletti
Добрый день.
Подскажите как правильно походить к созданию очередей ? С чего начать ?
Понимаю что вопрос общий и можно использовать гугл, но хотелось бы услышать тех кто уже реализовывал очереди.
Re: Реализация очередей
Добавлено: 2020.04.14, 11:41
ge74d8
Re: Реализация очередей
Добавлено: 2020.04.14, 12:28
Tonni_regoletti
Да, но хотелось бы более формального подхода, больше теории
Re: Реализация очередей
Добавлено: 2020.04.14, 13:46
samdark
Теории того, что такое очередь и как она работает?
Re: Реализация очередей
Добавлено: 2020.04.14, 14:07
iamguruman
samdark писал(а): ↑2020.04.14, 13:46
Теории того, что такое очередь и как она работает?
Samdark, тема очень интересная, в двух словах поясните как этим пользоваться, я слышал про это, но не могу понять тоже как это можно применять. Заранее признателен за ответ. Может быть ссылку на какой-нибудь ресурс где это описано.
Re: Реализация очередей
Добавлено: 2020.04.14, 14:19
Tonni_regoletti
samdark писал(а): ↑2020.04.14, 13:46
Теории того, что такое очередь и как она работает?
Да что бы не совсем бездумно юзать
Re: Реализация очередей
Добавлено: 2020.04.14, 21:48
samdark
Re: Реализация очередей
Добавлено: 2020.04.15, 09:18
Tonni_regoletti
Re: Реализация очередей
Добавлено: 2020.04.16, 18:26
zxczxc12
Tonni_regoletti писал(а): ↑2020.04.14, 11:08
Добрый день.
Подскажите как правильно походить к созданию очередей ? С чего начать ?
Понимаю что вопрос общий и можно использовать гугл, но хотелось бы услышать тех кто уже реализовывал очереди.
Я делал
Вот типичная задача для очередей
Юзер загружает своё фото . Мне нужно взять его фотку и сделать с неё :
1) 4 тхумбнейлсов разных разрешений
2) заблурить все тхумбтейлся ( что бы не зареганые юзера не видели изображений )
если пункт 1 делается сервером быстро , То блур - крайне долго , а если учесть что юзер может загружать в свой альбом много фото то это будет очень долгое ожидание для него пока все обработается сервером
выход - применение очереди
теперь делает тхумбнейлсы у меня сервер на лету и после окончания я ставлю новую задачу в очередь на создание блура
таким образом юзер не долго ждет загрузку своих фото , а обработка блур делается в фоне
очень простое в использовании этого дела:
yiisoft/yii2-queue
вот пример как использую :
Сам код задачи (job)
Код: Выделить всё
namespace common\jobs;
use common\models\ImageProcessing;
use yii\base\BaseObject;
class BlurImageJob extends BaseObject implements \yii\queue\JobInterface
{
public $source_image_path;
public $destination_image_path;
public $img_x;
public $img_y;
public function execute($queue)
{
ImageProcessing::CreateBlurThumbnail($this->source_image_path, $this->destination_image_path, ImageProcessing::getBlurLevel($this->img_x, $this->img_y));
}
}
вот место где я савлю в очередь :
Код: Выделить всё
...
/**
* @param null|PhotoAlbumItem $model
* @param bool $use_queue
*/
public function makeBlurImage($model = null, bool $use_queue = true)
{
if (!$model) {
$model = $this;
}
foreach ($model->image_sizes as $x => $y) {
$size = $x . 'x' . $y;
if ($y == 'h') continue;
$new_image_path = $model->getImagePath($model->id . '_' . $size);
$hash_image_path = $model->getImagePath($model->hash . '_' . $size);
if (!$use_queue) {
ImageProcessing::CreateBlurThumbnail($hash_image_path, $new_image_path, ImageProcessing::getBlurLevel($x, $y));
} else {
Yii::$app->queue->push(new BlurImageJob([
'source_image_path' => $hash_image_path,
'destination_image_path' => $new_image_path,
'img_x' => $x,
'img_y' => $y
]));
}
}
}
...
Re: Реализация очередей
Добавлено: 2020.04.17, 14:37
Tonni_regoletti
zxczxc12 писал(а): ↑2020.04.16, 18:26
Tonni_regoletti писал(а): ↑2020.04.14, 11:08
Добрый день.
Подскажите как правильно походить к созданию очередей ? С чего начать ?
Понимаю что вопрос общий и можно использовать гугл, но хотелось бы услышать тех кто уже реализовывал очереди.
Я делал
Вот типичная задача для очередей
Юзер загружает своё фото . Мне нужно взять его фотку и сделать с неё :
1) 4 тхумбнейлсов разных разрешений
2) заблурить все тхумбтейлся ( что бы не зареганые юзера не видели изображений )
если пункт 1 делается сервером быстро , То блур - крайне долго , а если учесть что юзер может загружать в свой альбом много фото то это будет очень долгое ожидание для него пока все обработается сервером
выход - применение очереди
теперь делает тхумбнейлсы у меня сервер на лету и после окончания я ставлю новую задачу в очередь на создание блура
таким образом юзер не долго ждет загрузку своих фото , а обработка блур делается в фоне
очень простое в использовании этого дела:
yiisoft/yii2-queue
вот пример как использую :
Сам код задачи (job)
Код: Выделить всё
namespace common\jobs;
use common\models\ImageProcessing;
use yii\base\BaseObject;
class BlurImageJob extends BaseObject implements \yii\queue\JobInterface
{
public $source_image_path;
public $destination_image_path;
public $img_x;
public $img_y;
public function execute($queue)
{
ImageProcessing::CreateBlurThumbnail($this->source_image_path, $this->destination_image_path, ImageProcessing::getBlurLevel($this->img_x, $this->img_y));
}
}
вот место где я савлю в очередь :
Код: Выделить всё
...
/**
* @param null|PhotoAlbumItem $model
* @param bool $use_queue
*/
public function makeBlurImage($model = null, bool $use_queue = true)
{
if (!$model) {
$model = $this;
}
foreach ($model->image_sizes as $x => $y) {
$size = $x . 'x' . $y;
if ($y == 'h') continue;
$new_image_path = $model->getImagePath($model->id . '_' . $size);
$hash_image_path = $model->getImagePath($model->hash . '_' . $size);
if (!$use_queue) {
ImageProcessing::CreateBlurThumbnail($hash_image_path, $new_image_path, ImageProcessing::getBlurLevel($x, $y));
} else {
Yii::$app->queue->push(new BlurImageJob([
'source_image_path' => $hash_image_path,
'destination_image_path' => $new_image_path,
'img_x' => $x,
'img_y' => $y
]));
}
}
}
...
Спасибо)