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

Skip to content

Commit 48f5d21

Browse files
committed
[Messenger] make retry logic work without SentStamp
1 parent a9bcdcc commit 48f5d21

File tree

3 files changed

+9
-33
lines changed

3 files changed

+9
-33
lines changed

src/Symfony/Component/Messenger/Tests/RetryIntegrationTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ public function testRetryMechanism()
3434
$senderAndReceiver = new DummySenderAndReceiver();
3535

3636
$senderLocator = $this->createMock(ContainerInterface::class);
37-
$senderLocator->method('has')->with('sender_alias')->willReturn(true);
38-
$senderLocator->method('get')->with('sender_alias')->willReturn($senderAndReceiver);
37+
$senderLocator->method('has')->with('receiverName')->willReturn(true);
38+
$senderLocator->method('get')->with('receiverName')->willReturn($senderAndReceiver);
3939
$senderLocator = new SendersLocator([DummyMessage::class => ['sender_alias']], $senderLocator);
4040

4141
$handler = new DummyMessageHandlerFailingFirstTimes(0);

src/Symfony/Component/Messenger/Tests/WorkerTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public function testWorkerDoesNotWrapMessagesAlreadyWrappedWithReceivedMessage()
8484
public function testDispatchCausesRetry()
8585
{
8686
$receiver = new DummyReceiver([
87-
[new Envelope(new DummyMessage('Hello'), [new SentStamp('Some\Sender', 'sender_alias')])],
87+
[new Envelope(new DummyMessage('Hello'), [new SentStamp('Some\Sender', 'transport1')])],
8888
]);
8989

9090
$bus = $this->getMockBuilder(MessageBusInterface::class)->getMock();
@@ -97,7 +97,7 @@ public function testDispatchCausesRetry()
9797
$this->assertNotNull($redeliveryStamp);
9898
// retry count now at 1
9999
$this->assertSame(1, $redeliveryStamp->getRetryCount());
100-
$this->assertSame('sender_alias', $redeliveryStamp->getSenderClassOrAlias());
100+
$this->assertSame('transport1', $redeliveryStamp->getSenderClassOrAlias());
101101

102102
// received stamp is removed
103103
$this->assertNull($envelope->last(ReceivedStamp::class));
@@ -108,7 +108,7 @@ public function testDispatchCausesRetry()
108108
$retryStrategy = $this->getMockBuilder(RetryStrategyInterface::class)->getMock();
109109
$retryStrategy->expects($this->once())->method('isRetryable')->willReturn(true);
110110

111-
$worker = new Worker(['receiver1' => $receiver], $bus, ['receiver1' => $retryStrategy]);
111+
$worker = new Worker(['transport1' => $receiver], $bus, ['transport1' => $retryStrategy]);
112112
$worker->run([], function (?Envelope $envelope) use ($worker) {
113113
// stop after the messages finish
114114
if (null === $envelope) {
@@ -123,7 +123,7 @@ public function testDispatchCausesRetry()
123123
public function testDispatchCausesRejectWhenNoRetry()
124124
{
125125
$receiver = new DummyReceiver([
126-
[new Envelope(new DummyMessage('Hello'), [new SentStamp('Some\Sender', 'sender_alias')])],
126+
[new Envelope(new DummyMessage('Hello'), [new SentStamp('Some\Sender', 'transport1')])],
127127
]);
128128

129129
$bus = $this->getMockBuilder(MessageBusInterface::class)->getMock();
@@ -132,7 +132,7 @@ public function testDispatchCausesRejectWhenNoRetry()
132132
$retryStrategy = $this->getMockBuilder(RetryStrategyInterface::class)->getMock();
133133
$retryStrategy->expects($this->once())->method('isRetryable')->willReturn(false);
134134

135-
$worker = new Worker(['receiver1' => $receiver], $bus, ['receiver1' => $retryStrategy]);
135+
$worker = new Worker(['transport1' => $receiver], $bus, ['transport1' => $retryStrategy]);
136136
$worker->run([], function (?Envelope $envelope) use ($worker) {
137137
// stop after the messages finish
138138
if (null === $envelope) {
@@ -155,7 +155,7 @@ public function testDispatchCausesRejectOnUnrecoverableMessage()
155155
$retryStrategy = $this->getMockBuilder(RetryStrategyInterface::class)->getMock();
156156
$retryStrategy->expects($this->never())->method('isRetryable');
157157

158-
$worker = new Worker(['receiver1' => $receiver], $bus, ['receiver1' => $retryStrategy]);
158+
$worker = new Worker(['transport1' => $receiver], $bus, ['transport1' => $retryStrategy]);
159159
$worker->run([], function (?Envelope $envelope) use ($worker) {
160160
// stop after the messages finish
161161
if (null === $envelope) {

src/Symfony/Component/Messenger/Worker.php

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,11 @@
1717
use Symfony\Component\Messenger\Event\WorkerMessageReceivedEvent;
1818
use Symfony\Component\Messenger\Event\WorkerStoppedEvent;
1919
use Symfony\Component\Messenger\Exception\HandlerFailedException;
20-
use Symfony\Component\Messenger\Exception\LogicException;
2120
use Symfony\Component\Messenger\Exception\UnrecoverableMessageHandlingException;
2221
use Symfony\Component\Messenger\Retry\RetryStrategyInterface;
2322
use Symfony\Component\Messenger\Stamp\DelayStamp;
2423
use Symfony\Component\Messenger\Stamp\ReceivedStamp;
2524
use Symfony\Component\Messenger\Stamp\RedeliveryStamp;
26-
use Symfony\Component\Messenger\Stamp\SentStamp;
2725
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
2826
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
2927

@@ -150,7 +148,7 @@ private function handleMessage(Envelope $envelope, ReceiverInterface $receiver,
150148

151149
// add the delay and retry stamp info + remove ReceivedStamp
152150
$retryEnvelope = $envelope->with(new DelayStamp($delay))
153-
->with(new RedeliveryStamp($retryCount, $this->getSenderClassOrAlias($envelope)))
151+
->with(new RedeliveryStamp($retryCount, $transportName))
154152
->withoutAll(ReceivedStamp::class);
155153

156154
// re-send the message
@@ -197,28 +195,6 @@ private function shouldRetry(\Throwable $e, Envelope $envelope, RetryStrategyInt
197195
return false;
198196
}
199197

200-
$sentStamp = $envelope->last(SentStamp::class);
201-
if (null === $sentStamp) {
202-
if (null !== $this->logger) {
203-
$this->logger->warning('Message will not be retried because the SentStamp is missing and so the target sender cannot be determined.');
204-
}
205-
206-
return false;
207-
}
208-
209198
return $retryStrategy->isRetryable($envelope);
210199
}
211-
212-
private function getSenderClassOrAlias(Envelope $envelope): string
213-
{
214-
/** @var SentStamp|null $sentStamp */
215-
$sentStamp = $envelope->last(SentStamp::class);
216-
217-
if (null === $sentStamp) {
218-
// should not happen, because of the check in shouldRetry()
219-
throw new LogicException('Could not find SentStamp.');
220-
}
221-
222-
return $sentStamp->getSenderAlias() ?: $sentStamp->getSenderClass();
223-
}
224200
}

0 commit comments

Comments
 (0)