Skip to content

Commit d9f1fdd

Browse files
Merge branch '7.4' into 8.0
* 7.4: (25 commits) [RateLimiter] Fix retryAfter when consuming exactly all remaining tokens in FixedWindow and TokenBucket [RateLimiter] Fix retryAfter value on last token consume (SlidingWindow) [RateLimiter] Fix reservations outside the second fixed window [Filesystem] makePathRelative with existing files, remove ending / [Config][Routing] Fix exclude option being ignored for non-glob and PSR-4 resources [Serializer][Validator] Fix propertyPath in ConstraintViolationListNormalizer with MetadataAwareNameConverter [Messenger][Amqp] Don't use retry routing key when sending to failure transport [Messenger] Fix re-sending failed messages to a different failure transport [DependencyInjection] Fix #[AsTaggedItem] discovery through multi-level decoration chains [Config] Fix ArrayShapeGenerator required keys with deep merging [Validator] Add a guard when `Parser::IGNORE_UNKNOWN_VARIABLES` is not defined [Validator] Correctly handle null `allowedVariables` in `ExpressionSyntaxValidator` [DependencyInjection] Fix PriorityTaggedServiceTrait not discovering #[AsTaggedItem] on decorated services [Mailer] Clarify the purpose of SentMessage's "message id" concept [ObjectMapper] fix nested mapping with class-level transform [TwigBridge] Fix Bootstrap 4 form error layout [Form] Fix merging POST params and files when collection entries have mismatched indices [Validator] Fix type error for non-array items when Unique::fields is set [HttpKernel] Fix default locale ignored when Accept-Language has no enabled-locale match [FrameworkBundle] Make `ConfigDebugCommand` use its container to resolve env vars ...
2 parents 8bf5aee + 769bcc3 commit d9f1fdd

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

Tests/Transport/AmqpSenderTest.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,14 @@
1414
use PHPUnit\Framework\Attributes\RequiresPhpExtension;
1515
use PHPUnit\Framework\TestCase;
1616
use Symfony\Component\Messenger\Bridge\Amqp\Tests\Fixtures\DummyMessage;
17+
use Symfony\Component\Messenger\Bridge\Amqp\Transport\AmqpReceivedStamp;
1718
use Symfony\Component\Messenger\Bridge\Amqp\Transport\AmqpSender;
1819
use Symfony\Component\Messenger\Bridge\Amqp\Transport\AmqpStamp;
1920
use Symfony\Component\Messenger\Bridge\Amqp\Transport\Connection;
2021
use Symfony\Component\Messenger\Envelope;
2122
use Symfony\Component\Messenger\Exception\TransportException;
23+
use Symfony\Component\Messenger\Stamp\RedeliveryStamp;
24+
use Symfony\Component\Messenger\Stamp\SentToFailureTransportStamp;
2225
use Symfony\Component\Messenger\Stamp\TransportMessageIdStamp;
2326
use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;
2427

@@ -161,4 +164,33 @@ public function testTransportMessageIdStampIsNotCreatedIfMessageIdIsNotSet()
161164
$transportMessageIdStamp = $returnedEnvelope->last(TransportMessageIdStamp::class);
162165
$this->assertNull($transportMessageIdStamp);
163166
}
167+
168+
public function testDoNotUseRetryRoutingKeyWhenSendingToFailureTransport()
169+
{
170+
$amqpEnvelope = $this->createStub(\AMQPEnvelope::class);
171+
$amqpEnvelope->method('getRoutingKey')->willReturn('original_routing_key');
172+
173+
$envelope = new Envelope(new DummyMessage('Oy'), [
174+
new AmqpReceivedStamp($amqpEnvelope, 'original_queue'),
175+
new RedeliveryStamp(0),
176+
new SentToFailureTransportStamp('async'),
177+
]);
178+
$encoded = ['body' => '...', 'headers' => ['type' => DummyMessage::class]];
179+
180+
$serializer = $this->createStub(SerializerInterface::class);
181+
$serializer->method('encode')->willReturn($encoded);
182+
183+
$connection = $this->createMock(Connection::class);
184+
$connection->expects($this->once())->method('publish')
185+
->with($encoded['body'], $encoded['headers'], 0, $this->callback(function (AmqpStamp $stamp) {
186+
// The routing key must NOT be the original queue name
187+
$this->assertNotSame('original_queue', $stamp->getRoutingKey());
188+
$this->assertFalse($stamp->isRetryAttempt());
189+
190+
return true;
191+
}));
192+
193+
$sender = new AmqpSender($connection, $serializer);
194+
$sender->send($envelope);
195+
}
164196
}

Transport/AmqpSender.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Symfony\Component\Messenger\Exception\TransportException;
1616
use Symfony\Component\Messenger\Stamp\DelayStamp;
1717
use Symfony\Component\Messenger\Stamp\RedeliveryStamp;
18+
use Symfony\Component\Messenger\Stamp\SentToFailureTransportStamp;
1819
use Symfony\Component\Messenger\Stamp\TransportMessageIdStamp;
1920
use Symfony\Component\Messenger\Transport\Sender\SenderInterface;
2021
use Symfony\Component\Messenger\Transport\Serialization\PhpSerializer;
@@ -64,7 +65,7 @@ public function send(Envelope $envelope): Envelope
6465
$amqpStamp = AmqpStamp::createFromAmqpEnvelope(
6566
$amqpReceivedStamp->getAmqpEnvelope(),
6667
$amqpStamp,
67-
$envelope->last(RedeliveryStamp::class) ? $amqpReceivedStamp->getQueueName() : null
68+
$envelope->last(RedeliveryStamp::class) && !$envelope->last(SentToFailureTransportStamp::class) ? $amqpReceivedStamp->getQueueName() : null
6869
);
6970
}
7071

0 commit comments

Comments
 (0)