Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 781670f

Browse files
committed
[Messenger] Passing to WorkerMessageRetriedEvent envelope with actual stamps after sent
Signed-off-by: j.apsitis <[email protected]>
1 parent 85d0165 commit 781670f

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

src/Symfony/Component/Messenger/EventListener/SendFailedMessageForRetryListener.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public function onMessageFailed(WorkerMessageFailedEvent $event)
7777
$retryEnvelope = $this->withLimitedHistory($envelope, new DelayStamp($delay), new RedeliveryStamp($retryCount));
7878

7979
// re-send the message for retry
80-
$this->getSenderForTransport($event->getReceiverName())->send($retryEnvelope);
80+
$retryEnvelope = $this->getSenderForTransport($event->getReceiverName())->send($retryEnvelope);
8181

8282
if (null !== $this->eventDispatcher) {
8383
$this->eventDispatcher->dispatch(new WorkerMessageRetriedEvent($retryEnvelope, $event->getReceiverName()));

src/Symfony/Component/Messenger/Tests/EventListener/SendFailedMessageForRetryListenerTest.php

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,16 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Psr\Container\ContainerInterface;
16+
use Symfony\Component\DependencyInjection\Container;
1617
use Symfony\Component\Messenger\Envelope;
1718
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
19+
use Symfony\Component\Messenger\Event\WorkerMessageRetriedEvent;
1820
use Symfony\Component\Messenger\EventListener\SendFailedMessageForRetryListener;
1921
use Symfony\Component\Messenger\Exception\RecoverableMessageHandlingException;
2022
use Symfony\Component\Messenger\Retry\RetryStrategyInterface;
2123
use Symfony\Component\Messenger\Stamp\DelayStamp;
2224
use Symfony\Component\Messenger\Stamp\RedeliveryStamp;
25+
use Symfony\Component\Messenger\Stamp\TransportMessageIdStamp;
2326
use Symfony\Component\Messenger\Transport\Sender\SenderInterface;
2427
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
2528

@@ -190,4 +193,48 @@ public function testEnvelopeKeepOnlyTheLast10Stamps()
190193

191194
$listener->onMessageFailed($event);
192195
}
196+
197+
public function testRetriedEnvelopePassesToRetriedEvent()
198+
{
199+
$exception = new \Exception('no!');
200+
$envelope = new Envelope(new \stdClass());
201+
202+
$sender = $this->createMock(SenderInterface::class);
203+
$sender->expects($this->once())->method('send')->willReturnCallback(static function (Envelope $envelope) {
204+
return $envelope->with(new TransportMessageIdStamp(123));
205+
});
206+
207+
$eventDispatcher = $this->createMock(EventDispatcherInterface::class);
208+
$eventDispatcher->expects($this->once())->method('dispatch')->willReturnCallback(
209+
function (WorkerMessageRetriedEvent $retriedEvent) {
210+
$envelope = $retriedEvent->getEnvelope();
211+
212+
$transportIdStamp = $envelope->last(TransportMessageIdStamp::class);
213+
$this->assertNotNull($transportIdStamp);
214+
215+
return $retriedEvent;
216+
});
217+
218+
$senderLocator = new Container();
219+
$senderLocator->set('my_receiver', $sender);
220+
221+
$retryStrategy = $this->createMock(RetryStrategyInterface::class);
222+
$retryStrategy->expects($this->once())->method('isRetryable')->willReturn(true);
223+
$retryStrategy->expects($this->once())->method('getWaitingTime')->willReturn(1000);
224+
225+
$retryStrategyLocator = $this->createMock(ContainerInterface::class);
226+
$retryStrategyLocator->expects($this->once())->method('has')->willReturn(true);
227+
$retryStrategyLocator->expects($this->once())->method('get')->willReturn($retryStrategy);
228+
229+
$listener = new SendFailedMessageForRetryListener(
230+
$senderLocator,
231+
$retryStrategyLocator,
232+
null,
233+
$eventDispatcher
234+
);
235+
236+
$event = new WorkerMessageFailedEvent($envelope, 'my_receiver', $exception);
237+
238+
$listener->onMessageFailed($event);
239+
}
193240
}

0 commit comments

Comments
 (0)