88use Flowpack \JobQueue \Common \Queue \Message ;
99use Neos \Cache \Frontend \FrontendInterface ;
1010use Neos \Flow \Cli \ConsoleOutput ;
11+ use React \EventLoop ;
1112use Symfony \Component \Process \InputStream ;
1213use Symfony \Component \Process \Process ;
1314use t3n \JobQueue \RabbitMQ \Queue \RabbitQueue ;
1415
1516use function array_shift ;
17+ use function fputs ;
18+
19+ use const STDERR ;
20+ use const STDOUT ;
1621
1722final class Worker
1823{
@@ -60,7 +65,6 @@ public function executeMessage(Message $message): void
6065 '<success>Successfully executed job "%s"</success> ' ,
6166 [$ message ->getIdentifier ()]
6267 );
63- $ this ->output ->outputLine ('Output: %s ' , [$ process ->getOutput ()]);
6468 } else {
6569 $ maximumNumberOfReleases = isset ($ this ->queueSettings ['maximumNumberOfReleases ' ])
6670 ? (int ) $ this ->queueSettings ['maximumNumberOfReleases ' ]
@@ -70,7 +74,6 @@ public function executeMessage(Message $message): void
7074 $ releaseOptions = isset ($ this ->queueSettings ['releaseOptions ' ]) ? $ this ->queueSettings ['releaseOptions ' ] : [];
7175 $ this ->queue ->release ($ message ->getIdentifier (), $ releaseOptions );
7276 $ this ->queue ->reQueueMessage ($ message , $ releaseOptions );
73- $ this ->output ->outputLine ('Output: %s ' , [$ process ->getOutput ()]);
7477 $ this ->output ->outputLine (
7578 '<error>Job execution for job (message: "%s", queue: "%s") failed (%d/%d trials) - RELEASE</error> ' ,
7679 [
@@ -82,7 +85,6 @@ public function executeMessage(Message $message): void
8285 );
8386 } else {
8487 $ this ->queue ->abort ($ message ->getIdentifier ());
85- $ this ->output ->outputLine ('Output: %s ' , [$ process ->getOutput ()]);
8688 $ this ->output ->outputLine (
8789 '<error>Job execution for job (message: "%s", queue: "%s") failed (%d/%d trials) - ABORTING</error> ' ,
8890 [
@@ -126,7 +128,22 @@ private function runFromPool(string $messageCacheIdentifier): Process
126128
127129 $ input ->write ($ messageCacheIdentifier . PHP_EOL );
128130
129- $ process ->wait ();
131+ $ loop = EventLoop \Loop::get ();
132+ $ loop ->addPeriodicTimer (0.01 , function (EventLoop \TimerInterface $ timer ) use ($ process , $ loop ) {
133+ try {
134+ fputs (STDOUT , $ process ->getIncrementalOutput ());
135+ fputs (STDERR , $ process ->getIncrementalErrorOutput ());
136+ } catch (\Throwable $ e ) {
137+ }
138+
139+ if (!$ process ->isRunning ()) {
140+ $ loop ->cancelTimer ($ timer );
141+ $ loop ->stop ();
142+ }
143+ });
144+
145+ $ loop ->run ();
146+
130147 return $ process ;
131148 }
132149
0 commit comments