Реализация очередей
- Tonni_regoletti
- Сообщения: 52
- Зарегистрирован: 2019.10.11, 09:16
Реализация очередей
Добрый день.
Подскажите как правильно походить к созданию очередей ? С чего начать ?
Понимаю что вопрос общий и можно использовать гугл, но хотелось бы услышать тех кто уже реализовывал очереди.
Подскажите как правильно походить к созданию очередей ? С чего начать ?
Понимаю что вопрос общий и можно использовать гугл, но хотелось бы услышать тех кто уже реализовывал очереди.
- Tonni_regoletti
- Сообщения: 52
- Зарегистрирован: 2019.10.11, 09:16
Re: Реализация очередей
Да, но хотелось бы более формального подхода, больше теории
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Реализация очередей
Теории того, что такое очередь и как она работает?
Нравится Yii? Давайте сделаем его лучше!.
-
- Сообщения: 237
- Зарегистрирован: 2018.05.10, 08:26
Re: Реализация очередей
Samdark, тема очень интересная, в двух словах поясните как этим пользоваться, я слышал про это, но не могу понять тоже как это можно применять. Заранее признателен за ответ. Может быть ссылку на какой-нибудь ресурс где это описано.
- Tonni_regoletti
- Сообщения: 52
- Зарегистрирован: 2019.10.11, 09:16
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Реализация очередей
Нравится Yii? Давайте сделаем его лучше!.
- Tonni_regoletti
- Сообщения: 52
- Зарегистрирован: 2019.10.11, 09:16
Re: Реализация очередей
Спасибо, было полезно )samdark писал(а): ↑2020.04.14, 21:48 Решил записать голосом
https://soundcloud.com/alexander-makaro ... oni-nuzhny
Re: Реализация очередей
Я делал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
]));
}
}
}
...
- Tonni_regoletti
- Сообщения: 52
- Зарегистрирован: 2019.10.11, 09:16
Re: Реализация очередей
Спасибо)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 ])); } } } ...