Страница 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 записей теряются.