Страница 1 из 1
Потеря данных при использовании командной шины
Добавлено: 2016.04.19, 18:06
nepster
Ранее использовал для всех консольных вызовов вот эту штуку:
https://github.com/vova07/yii2-console-runner-extension
Теперь задачи усложнились, решил взять что-то посерьезней. Выбора особо не много, но есть вот такая штука:
https://github.com/trntv/yii2-command-bus
Подключил, настроил вроде все окей, за исключением того, что часто эта штука не срабатывает. Закономерность я не вычислил, но если например раз 10 запустить команду, то сработает она примерно от 4 до 7 раз, но не как не все 10 раз.
Собственно куда все это дело теряется, по каким причинам и можно ли этого как-то избежать ?
Re: Потеря данных при использовании командной шины
Добавлено: 2016.04.19, 21:25
zelenin
ты путаешь понятия: консольные команды и команды командной шины - это разные сущности. Поэтому yii2-console-runner-extension !== yii2-command-bus - это вообще разные вещи для разных задач. Командная шина - это суть вариация сервисного слоя.
Re: Потеря данных при использовании командной шины
Добавлено: 2016.04.19, 21:25
zelenin
nepster писал(а):Подключил, настроил вроде все окей, за исключением того, что часто эта штука не срабатывает. Закономерность я не вычислил, но если например раз 10 запустить команду, то сработает она примерно от 4 до 7 раз, но не как не все 10 раз.
в виду выше сказанного, озвучь задачу - предложим решение.
Re: Потеря данных при использовании командной шины
Добавлено: 2016.04.19, 22:28
samdark
zelenin, он отказался от console runner.
Re: Потеря данных при использовании командной шины
Добавлено: 2016.04.19, 23:26
zelenin
Sam Dark писал(а):zelenin, он отказался от console runner.
это понятно, но на замену выбрал command-bus, который имеет какие-то консольные плюшки. Но что конкретно ему надо?
Re: Потеря данных при использовании командной шины
Добавлено: 2016.04.20, 09:56
ZeiN
Надо было сразу на гитхаб писать, а не сюда
Напишите либо туда подробности, либо мне в личку, попробую помочь, но, честно говоря, у нас все отлично работает в продакшене уже пару месяцев как и никаких "потерь данных" замечено не было.
Re: Потеря данных при использовании командной шины
Добавлено: 2016.04.20, 10:10
nepster
zelenin писал(а):ты путаешь понятия: консольные команды и команды командной шины - это разные сущности. Поэтому yii2-console-runner-extension !== yii2-command-bus - это вообще разные вещи для разных задач. Командная шина - это суть вариация сервисного слоя.
Да это я понимаю, ты походу меня не совсем понял, yii2-console-runner-extension я указал для примера, что бы было понятно что имеется ввиду.
По факту от командной шины мне нужен удобный запуск команд с различными данными и некоторые задачи должны выполняться в фоне, например отправка сообщений на почту или смс.
В общем yii2-command-bus мне отлично подходит. Но если говорить именно о фоновых задачах, то около 40% запуском не срабатывают. Почему так происходит ?
Re: Потеря данных при использовании командной шины
Добавлено: 2016.04.20, 10:15
nepster
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' => []
]));
Все как-бы работает, но если запустить это дело раз 10 подряд, то в логах будет от 4 до 7 записей. Тоесть 3 - 6 записей теряются.