Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 0034dee

Browse filesBrowse files
committed
[Messenger] make retry logic work without SentStamp
1 parent a9bcdcc commit 0034dee
Copy full SHA for 0034dee

File tree

3 files changed

+11
-35
lines changed
Filter options

3 files changed

+11
-35
lines changed

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

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Tests/RetryIntegrationTest.php
+4-4Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ 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);
39-
$senderLocator = new SendersLocator([DummyMessage::class => ['sender_alias']], $senderLocator);
37+
$senderLocator->method('has')->with('transportName')->willReturn(true);
38+
$senderLocator->method('get')->with('transportName')->willReturn($senderAndReceiver);
39+
$senderLocator = new SendersLocator([DummyMessage::class => ['transportName']], $senderLocator);
4040

4141
$handler = new DummyMessageHandlerFailingFirstTimes(0);
4242
$throwingHandler = new DummyMessageHandlerFailingFirstTimes(1);
@@ -52,7 +52,7 @@ public function testRetryMechanism()
5252
$envelope = new Envelope(new DummyMessage('API'));
5353
$bus->dispatch($envelope);
5454

55-
$worker = new Worker(['receiverName' => $senderAndReceiver], $bus, ['receiverName' => new MultiplierRetryStrategy()]);
55+
$worker = new Worker(['transportName' => $senderAndReceiver], $bus, ['transportName' => new MultiplierRetryStrategy()]);
5656
$worker->run([], function (?Envelope $envelope) use ($worker) {
5757
if (null === $envelope) {
5858
$worker->stop();

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

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Tests/WorkerTest.php
+6-6Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Worker.php
+1-25Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.