1515use Symfony \Component \Console \Helper \Dumper ;
1616use Symfony \Component \Console \Style \SymfonyStyle ;
1717use Symfony \Component \Messenger \Envelope ;
18+ use Symfony \Component \Messenger \Stamp \RedeliveryStamp ;
1819use Symfony \Component \Messenger \Stamp \SentToFailureTransportStamp ;
1920use Symfony \Component \Messenger \Stamp \TransportMessageIdStamp ;
2021use Symfony \Component \Messenger \Transport \Receiver \MessageCountAwareInterface ;
@@ -59,8 +60,10 @@ protected function displaySingleMessage(Envelope $envelope, SymfonyStyle $io)
5960 {
6061 $ io ->title ('Failed Message Details ' );
6162
62- /** @var SentToFailureTransportStamp $sentToFailureTransportStamp */
63+ /** @var SentToFailureTransportStamp|null $sentToFailureTransportStamp */
6364 $ sentToFailureTransportStamp = $ envelope ->last (SentToFailureTransportStamp::class);
65+ /** @var RedeliveryStamp|null $lastRedeliveryStamp */
66+ $ lastRedeliveryStamp = $ envelope ->last (RedeliveryStamp::class);
6467
6568 $ rows = [
6669 ['Class ' , \get_class ($ envelope ->getMessage ())],
@@ -70,25 +73,34 @@ protected function displaySingleMessage(Envelope $envelope, SymfonyStyle $io)
7073 $ rows [] = ['Message Id ' , $ id ];
7174 }
7275
76+ $ flattenException = null === $ lastRedeliveryStamp ? null : $ lastRedeliveryStamp ->getFlattenException ();
7377 if (null === $ sentToFailureTransportStamp ) {
7478 $ io ->warning ('Message does not appear to have been sent to this transport after failing ' );
7579 } else {
7680 $ rows = array_merge ($ rows , [
77- ['Failed at ' , $ sentToFailureTransportStamp -> getSentAt ()->format ('Y-m-d H:i:s ' )],
78- ['Error ' , $ sentToFailureTransportStamp ->getExceptionMessage ()],
79- ['Error Class ' , $ sentToFailureTransportStamp -> getFlattenException () ? $ sentToFailureTransportStamp -> getFlattenException ()-> getClass () : ' (unknown) ' ],
81+ ['Failed at ' , null === $ lastRedeliveryStamp ? '' : $ lastRedeliveryStamp -> getRedeliveredAt ()->format ('Y-m-d H:i:s ' )],
82+ ['Error ' , null === $ lastRedeliveryStamp ? '' : $ lastRedeliveryStamp ->getExceptionMessage ()],
83+ ['Error Class ' , null === $ flattenException ? ' (unknown) ' : $ flattenException -> getClass ()],
8084 ['Transport ' , $ sentToFailureTransportStamp ->getOriginalReceiverName ()],
8185 ]);
8286 }
8387
8488 $ io ->table ([], $ rows );
8589
90+ /** @var RedeliveryStamp[] $redeliveryStamps */
91+ $ redeliveryStamps = $ envelope ->all (RedeliveryStamp::class);
92+ $ io ->writeln (' Message history: ' );
93+ foreach ($ redeliveryStamps as $ redeliveryStamp ) {
94+ $ io ->writeln (sprintf (' * Message failed and redelivered to the <info>%s</info> transport at <info>%s</info> ' , $ redeliveryStamp ->getSenderClassOrAlias (), $ redeliveryStamp ->getRedeliveredAt ()->format ('Y-m-d H:i:s ' )));
95+ }
96+ $ io ->newLine ();
97+
8698 if ($ io ->isVeryVerbose ()) {
8799 $ io ->title ('Message: ' );
88100 $ dump = new Dumper ($ io );
89101 $ io ->writeln ($ dump ($ envelope ->getMessage ()));
90102 $ io ->title ('Exception: ' );
91- $ io ->writeln ($ sentToFailureTransportStamp -> getFlattenException () ->getTraceAsString ());
103+ $ io ->writeln (null === $ flattenException ? ' (no data) ' : $ flattenException ->getTraceAsString ());
92104 } else {
93105 $ io ->writeln (' Re-run command with <info>-vv</info> to see more message & error details. ' );
94106 }
0 commit comments