23
23
use Symfony \Component \Console \Style \SymfonyStyle ;
24
24
use Symfony \Component \EventDispatcher \EventDispatcherInterface ;
25
25
use Symfony \Component \Messenger \Event \WorkerMessageReceivedEvent ;
26
+ use Symfony \Component \Messenger \Event \WorkerMessageSkipEvent ;
26
27
use Symfony \Component \Messenger \EventListener \StopWorkerOnMessageLimitListener ;
27
28
use Symfony \Component \Messenger \MessageBusInterface ;
28
29
use Symfony \Component \Messenger \Stamp \MessageDecodingFailedStamp ;
30
+ use Symfony \Component \Messenger \Stamp \SentToFailureTransportStamp ;
29
31
use Symfony \Component \Messenger \Transport \Receiver \ListableReceiverInterface ;
30
32
use Symfony \Component \Messenger \Transport \Receiver \ReceiverInterface ;
31
33
use Symfony \Component \Messenger \Transport \Receiver \SingleMessageReceiver ;
@@ -68,8 +70,8 @@ protected function configure(): void
68
70
69
71
<info>php %command.full_name%</info>
70
72
71
- The command will interactively ask if each message should be retried
72
- or discarded .
73
+ The command will interactively ask if each message should be retried,
74
+ discarded or skipped .
73
75
74
76
Some transports support retrying a specific message id, which comes
75
77
from the <info>messenger:failed:show</info> command.
@@ -204,7 +206,8 @@ private function runWorker(string $failureTransportName, ReceiverInterface $rece
204
206
205
207
$ this ->forceExit = true ;
206
208
try {
207
- $ shouldHandle = $ shouldForce || 'retry ' === $ io ->choice ('Please select an action ' , ['retry ' , 'delete ' ], 'retry ' );
209
+ $ choice = $ io ->choice ('Please select an action ' , ['retry ' , 'delete ' , 'skip ' ], 'retry ' );
210
+ $ shouldHandle = $ shouldForce || 'retry ' === $ choice ;
208
211
} finally {
209
212
$ this ->forceExit = false ;
210
213
}
@@ -213,6 +216,10 @@ private function runWorker(string $failureTransportName, ReceiverInterface $rece
213
216
return ;
214
217
}
215
218
219
+ if ('skip ' === $ choice ) {
220
+ $ this ->eventDispatcher ->dispatch (new WorkerMessageSkipEvent ($ envelope , $ envelope ->last (SentToFailureTransportStamp::class)->getOriginalReceiverName ()));
221
+ }
222
+
216
223
$ messageReceivedEvent ->shouldHandle (false );
217
224
$ receiver ->reject ($ envelope );
218
225
};
0 commit comments