Ранее использовал для всех консольных вызовов вот эту штуку: https://github.com/vova07/yii2-console-runner-extension
Теперь задачи усложнились, решил взять что-то посерьезней. Выбора особо не много, но есть вот такая штука:
https://github.com/trntv/yii2-command-bus
Подключил, настроил вроде все окей, за исключением того, что часто эта штука не срабатывает. Закономерность я не вычислил, но если например раз 10 запустить команду, то сработает она примерно от 4 до 7 раз, но не как не все 10 раз.
Собственно куда все это дело теряется, по каким причинам и можно ли этого как-то избежать ?
Потеря данных при использовании командной шины
Re: Потеря данных при использовании командной шины
ты путаешь понятия: консольные команды и команды командной шины - это разные сущности. Поэтому yii2-console-runner-extension !== yii2-command-bus - это вообще разные вещи для разных задач. Командная шина - это суть вариация сервисного слоя.
Последний раз редактировалось zelenin 2016.04.19, 21:27, всего редактировалось 1 раз.
Re: Потеря данных при использовании командной шины
в виду выше сказанного, озвучь задачу - предложим решение.nepster писал(а):Подключил, настроил вроде все окей, за исключением того, что часто эта штука не срабатывает. Закономерность я не вычислил, но если например раз 10 запустить команду, то сработает она примерно от 4 до 7 раз, но не как не все 10 раз.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Потеря данных при использовании командной шины
zelenin, он отказался от console runner.
Нравится Yii? Давайте сделаем его лучше!.
Re: Потеря данных при использовании командной шины
это понятно, но на замену выбрал command-bus, который имеет какие-то консольные плюшки. Но что конкретно ему надо?Sam Dark писал(а):zelenin, он отказался от console runner.
Re: Потеря данных при использовании командной шины
Надо было сразу на гитхаб писать, а не сюда
Напишите либо туда подробности, либо мне в личку, попробую помочь, но, честно говоря, у нас все отлично работает в продакшене уже пару месяцев как и никаких "потерь данных" замечено не было.
Напишите либо туда подробности, либо мне в личку, попробую помочь, но, честно говоря, у нас все отлично работает в продакшене уже пару месяцев как и никаких "потерь данных" замечено не было.
Re: Потеря данных при использовании командной шины
Да это я понимаю, ты походу меня не совсем понял, yii2-console-runner-extension я указал для примера, что бы было понятно что имеется ввиду.zelenin писал(а):ты путаешь понятия: консольные команды и команды командной шины - это разные сущности. Поэтому yii2-console-runner-extension !== yii2-command-bus - это вообще разные вещи для разных задач. Командная шина - это суть вариация сервисного слоя.
По факту от командной шины мне нужен удобный запуск команд с различными данными и некоторые задачи должны выполняться в фоне, например отправка сообщений на почту или смс.
В общем yii2-command-bus мне отлично подходит. Но если говорить именно о фоновых задачах, то около 40% запуском не срабатывают. Почему так происходит ?
Re: Потеря данных при использовании командной шины
Пару дней назад написал, хотя по другой причине, потом дополнил. Я могу подробности изложить тут, возможно это будет интересно не только мне.ZeiN писал(а):Надо было сразу на гитхаб писать, а не сюда
Напишите либо туда подробности, либо мне в личку, попробую помочь, но, честно говоря, у нас все отлично работает в продакшене уже пару месяцев как и никаких "потерь данных" замечено не было.
Конфиг:
Код: Выделить всё
'controllerMap' => [
'background-bus' => [
'class' => 'trntv\bus\console\BackgroundBusController',
]
],
'components' => [
...
'commandBus' => [
'class' => 'trntv\bus\CommandBus',
'middlewares' => [
[
'class' => '\trntv\bus\middlewares\BackgroundCommandMiddleware',
'backgroundHandlerBinary' => '/usr/bin/php',
'backgroundHandlerPath' => '@app/../yii',
'backgroundHandlerRoute' => 'background-bus/handle',
'backgroundProcessTimeout' => 0,
],
[
'class' => '\trntv\bus\middlewares\LoggingMiddleware',
'level' => 1,
],
],
],
...
Код: Выделить всё
<?php
namespace app\commands\handles;
use trntv\bus\middlewares\BackgroundCommandTrait;
use trntv\bus\interfaces\BackgroundCommand;
use trntv\bus\interfaces\SelfHandlingCommand;
use yii\base\Object;
use Yii;
/**
* Test Command
* @package app\commands\handles
*/
class TestCommand extends Object implements BackgroundCommand, SelfHandlingCommand
{
use BackgroundCommandTrait;
public $setTo;
public $subject;
public $view;
public $data;
/**
* @return bool
*/
public function isAsync()
{
return true;
}
/**
* @param $command
*/
public function handle($command)
{
sleep(3);
Yii::error('----');
}
}
Запуск команды:
Код: Выделить всё
Yii::$app->commandBus->handle(new \app\commands\handles\TestCommand([
'setTo' => 'nepsterxxx@mail.ru',
'subject' => 'Тест',
'view' => 'test',
'data' => []
]));