Comments (17)
Походу тут ошибка в документации: 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.
Остается только проблема с потерей данных, подробнее: http://yiiframework.ru/forum/viewtopic.php?f=19&p=186572#p186572
from yii2-command-bus.
Спасибо за информацию, сегодня проверю поведение async и попробую зарепродюсить потерю.
from yii2-command-bus.
Если не получится, я смогу вам продемонстрировать пример.
from yii2-command-bus.
Получилось проверить ?
from yii2-command-bus.
Документацию немного подправил, дописал тесты, но воспроизвести не удалось.
Попробуйте склонировать проект в какую-то папку, заинстались зависимости и запустить в корне проекта
docker-compose up -d
./vendor/bin/phpunit
from yii2-command-bus.
К сожалению буду только вечером. Но на первый взгляд мне кажется проблема в том, что я целенаправленно ставил sleep или цикл который делает команду более сложной. Тоесть она выполняется несколько секунд. Возможно проблема именно в этом.
from yii2-command-bus.
Например если команда выполняется секунд десять, а мы в первую секунду запускаем сразу 10 команд.
from yii2-command-bus.
Вообщем попробуйте как будет возможность, плюс поиграйтесь с вот этим вот тестом, с параметром sleep команды, возможно удастся понять закономерность:
https://github.com/trntv/yii2-command-bus/blob/master/tests/BackgroundMiddlewareTest.php#L24
from yii2-command-bus.
К сожалению не успел поработать с тестами, особо дел с ними не имел, как и с докером, вот только поставил докер, но нужно будет чуть больше времени поразбираться. А пока есть пример с помощью старого дедовского способа:
Обычный экшин в приложении:
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 раз экшин, который все это дело вызывает. Так как у меня логи записываются в базу данных, мы легко видим результат:
ConsoleRunner честно отрабатывает 10 раз.
А вот командная шина всего 3 раза при одинаковых условиях.
К сожалению по загруженности поработать с тестами и выдать результат смогу возможно к следующим выходным. Хотя пока честно говоря не представляю как можно затестировать запуск в фоновом решиме.
from yii2-command-bus.
@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.
Судя по тому что вы показываете, у вас как раз не отрабатывает команда, иначе записей в лог было бы столько сколько нужно.
Issues о Process надо отправлять в репозиторий самой symfony
from yii2-command-bus.
@trntv ну она отрабатывает, но не всегда. Тоесть я делаю 10 запусков, а команда отрабатывает от 4 до 7 раз.
Я еще не проверял, решил ли эту проблему например redis.
К сожалению я только учу англ однако он достаточно слабенький, но попробую что-то накалякать, возможной поймут.
Спасибо.
from yii2-command-bus.
Добрый день проблему решили?
Я тут на днях все способы перепробовал на win7-10
с флагом 'async' => true,
как только скрипт завершается и если консольный скрипт работает то он убивается тутже, что я только не побывал делать, ничего не работает и не помогает.
все потому, что винда убивает все процессы которые связаны с скриптом родителем.
пока решил это костыльным путем через curl + дополнительный экшин в контроллере
from yii2-command-bus.
Здравствуйте. За себя отвечу, что нет. Пропала необходимость работать с данным расширением.
from yii2-command-bus.
У меня лично приходил signal 9 от symfony/process. Ему памяти не хватало, хотя на сервере было на тот момент 2Gb. То бишь какие-то задания прогонял, на каких-то выпадал.
from yii2-command-bus.
Я тогда еще тестировал на локальном сервере, с 8Gb оперативы.
from yii2-command-bus.
Related Issues (20)
- Problem with LoggingMiddleware in combination with QueuedCommandMiddleware HOT 2
- Still issues with logging and loop on exceptions
- Background commands not work for this case HOT 3
- details description of background process
- Issue with PHP_BINARY HOT 5
- waiting for multiple Background Commands running in parallel
- Использование другой очереди заданий HOT 4
- php7.2 support HOT 1
- Object can not be specific class name HOT 8
- BackgroundCommandMiddleware proc_open Error
- PHP 7.2 Cannot use yii\base\Object as Object because 'Object' is a special class name
- Error: Argument 1 passed to trntv\bus\locators\ClassNameLocator::addHandler() must be an instance of trntv\bus\interfaces\Handler, string given
- extract queue and background functionality to middlewares
- More tests
- Question regarding Logging HOT 3
- don't sleep if there are jobs in queue in QueueBusController.php HOT 1
- can you give a selfhandled redis queue command example? HOT 4
- DelayedCommand feature request HOT 2
- LoggingMiddleware
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from yii2-command-bus.