Giter Club home page Giter Club logo

Comments (17)

nepster-web avatar nepster-web commented on June 22, 2024

Походу тут ошибка в документации: https://github.com/trntv/yii2-command-bus#2-background-commands-support-optional

Если использовать

    public $async = true;

Будет вот такая ошибка:

 PHP Compile Error – yii\base\ErrorException
app\commands\handles\TestCommand and trntv\bus\middlewares\BackgroundCommandTrait define the same property ($async) in the composition of app\commands\handles\TestCommand. However, the definition differs and is considered incompatible. Class was composed

Для корректной работы необходимо полностью переопределить метод:

    public function isAsync()
    {
        return true;
    }

from yii2-command-bus.

nepster-web avatar nepster-web commented on June 22, 2024

Остается только проблема с потерей данных, подробнее: http://yiiframework.ru/forum/viewtopic.php?f=19&p=186572#p186572

from yii2-command-bus.

trntv avatar trntv commented on June 22, 2024

Спасибо за информацию, сегодня проверю поведение async и попробую зарепродюсить потерю.

from yii2-command-bus.

nepster-web avatar nepster-web commented on June 22, 2024

Если не получится, я смогу вам продемонстрировать пример.

from yii2-command-bus.

nepster-web avatar nepster-web commented on June 22, 2024

Получилось проверить ?

from yii2-command-bus.

trntv avatar trntv commented on June 22, 2024

Документацию немного подправил, дописал тесты, но воспроизвести не удалось.

Попробуйте склонировать проект в какую-то папку, заинстались зависимости и запустить в корне проекта

docker-compose up -d
./vendor/bin/phpunit

from yii2-command-bus.

nepster-web avatar nepster-web commented on June 22, 2024

К сожалению буду только вечером. Но на первый взгляд мне кажется проблема в том, что я целенаправленно ставил sleep или цикл который делает команду более сложной. Тоесть она выполняется несколько секунд. Возможно проблема именно в этом.

from yii2-command-bus.

nepster-web avatar nepster-web commented on June 22, 2024

Например если команда выполняется секунд десять, а мы в первую секунду запускаем сразу 10 команд.

from yii2-command-bus.

trntv avatar trntv commented on June 22, 2024

Вообщем попробуйте как будет возможность, плюс поиграйтесь с вот этим вот тестом, с параметром sleep команды, возможно удастся понять закономерность:
https://github.com/trntv/yii2-command-bus/blob/master/tests/BackgroundMiddlewareTest.php#L24

from yii2-command-bus.

nepster-web avatar nepster-web commented on June 22, 2024

К сожалению не успел поработать с тестами, особо дел с ними не имел, как и с докером, вот только поставил докер, но нужно будет чуть больше времени поразбираться. А пока есть пример с помощью старого дедовского способа:

Обычный экшин в приложении:

    public function actionTest()
    {
        $cr = new \vova07\console\ConsoleRunner(['file' => '@app/../yii']);
        $cr->run('test/test');

        Yii::$app->commandBus->handle(new \app\commands\handles\TestCommand([
            'async' => true,
        ]));

    }

Тут я пытаюсь сравнить ранее используемый ConsoleRunner с Вашей командной шиной.

Код для ConsoleRunner:

    public function actionTest()
    {
        for($i = 0; $i <= 100000000; $i++) {

        }
        Yii::error('+++++');
    }

Код для шины:

    public function handle($command)
    {
        for($i = 0; $i <= 100000000; $i++) {

        }
        Yii::error('----');
    }

Далее, просто запускаю 10 раз экшин, который все это дело вызывает. Так как у меня логи записываются в базу данных, мы легко видим результат:
_2016-04-23_22-41-12

ConsoleRunner честно отрабатывает 10 раз.
А вот командная шина всего 3 раза при одинаковых условиях.

К сожалению по загруженности поработать с тестами и выдать результат смогу возможно к следующим выходным. Хотя пока честно говоря не представляю как можно затестировать запуск в фоновом решиме.

from yii2-command-bus.

nepster-web avatar nepster-web commented on June 22, 2024

@trntv итак ситуация следующая. В вашем тесте вы тестируете непосредственно работу команды. Тест будет всегда выполнятся, так как ошибок в самой команде нет.

Однако проблема заключается в потере данных, которая происходит непосредственно если отправлять команды в фоновый режим. К сожалению я не уверен, что это можно как-то протестировать с помощью автоматических тестов.

Однако старый дедовский метод всегда под рукой. Поэтому я еще раз сравнил, но на этот раз уже 3 расширения:

        // Console Runner
        $cr = new \vova07\console\ConsoleRunner(['file' => '@app/../yii']);
        $cr->run('test/test');

        // Command Bus
        Yii::$app->commandBus->handle(new \app\commands\handles\TestCommand([
            'async' => true,
            'setTo' => '[email protected]',
            'subject' => 'Тест',
            'view' => 'test',
            'data' => []
        ]));

        // Symfony
        $process = new Process(Yii::getAlias('@app/../yii') . ' test/test2');
        $process->start();

Опять таки условия все одинаковые и команды тоже. Запускаем выполнение 10 раз и результаты примерно такие:
ConsoleRunner - 10 / 10
commandBus - 7 / 10
Process - 6 / 10

Я понятия не имею в чем прикол, и скорее всего есть какае-то особенность так как Process сериализует объект и кидает в фон, а ConsoleRunner просто запускает экшин через консольную утилиту yii.

Поэтому так как Process сидит в основе commandBus, то проблема находится именно в корне самого симфони компонента. Поскольку Issues у них закрыты и это требует серьезного разбирательства нужно что-то придумать.

from yii2-command-bus.

trntv avatar trntv commented on June 22, 2024

Судя по тому что вы показываете, у вас как раз не отрабатывает команда, иначе записей в лог было бы столько сколько нужно.

Issues о Process надо отправлять в репозиторий самой symfony

from yii2-command-bus.

nepster-web avatar nepster-web commented on June 22, 2024

@trntv ну она отрабатывает, но не всегда. Тоесть я делаю 10 запусков, а команда отрабатывает от 4 до 7 раз.

Я еще не проверял, решил ли эту проблему например redis.

К сожалению я только учу англ однако он достаточно слабенький, но попробую что-то накалякать, возможной поймут.

Спасибо.

from yii2-command-bus.

sanchezzzhak avatar sanchezzzhak commented on June 22, 2024

Добрый день проблему решили?

Я тут на днях все способы перепробовал на win7-10
с флагом 'async' => true,

как только скрипт завершается и если консольный скрипт работает то он убивается тутже, что я только не побывал делать, ничего не работает и не помогает.
все потому, что винда убивает все процессы которые связаны с скриптом родителем.

пока решил это костыльным путем через curl + дополнительный экшин в контроллере

from yii2-command-bus.

nepster-web avatar nepster-web commented on June 22, 2024

Здравствуйте. За себя отвечу, что нет. Пропала необходимость работать с данным расширением.

from yii2-command-bus.

TheElk2 avatar TheElk2 commented on June 22, 2024

У меня лично приходил signal 9 от symfony/process. Ему памяти не хватало, хотя на сервере было на тот момент 2Gb. То бишь какие-то задания прогонял, на каких-то выпадал.

from yii2-command-bus.

nepster-web avatar nepster-web commented on June 22, 2024

Я тогда еще тестировал на локальном сервере, с 8Gb оперативы.

from yii2-command-bus.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.