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

Skip to content

Commit 16f2b32

Browse files
committed
BC layer
1 parent e151d3c commit 16f2b32

File tree

14 files changed

+102
-35
lines changed

14 files changed

+102
-35
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,9 @@ public function load(array $configs, ContainerBuilder $container)
282282
$container->removeDefinition('console.command.messenger_debug');
283283
$container->removeDefinition('console.command.messenger_stop_workers');
284284
$container->removeDefinition('console.command.messenger_setup_transports');
285+
$container->removeDefinition('console.command.messenger_failed_messages_retry');
286+
$container->removeDefinition('console.command.messenger_failed_messages_show');
287+
$container->removeDefinition('console.command.messenger_failed_messages_purge');
285288
}
286289

287290
$propertyInfoEnabled = $this->isConfigEnabled($container, $config['property_info']);
@@ -1758,13 +1761,19 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
17581761
$container->getDefinition('messenger.failure.send_failed_message_to_failed_transport_listener')
17591762
->replaceArgument(1, $config['failure_transport']);
17601763

1761-
$container->getDefinition('console.command.messenger_failed_messages_retry')
1762-
->replaceArgument(0, $config['failure_transport'])
1763-
->replaceArgument(4, $transportRetryReferences[$config['failure_transport']] ?? null);
1764-
$container->getDefinition('console.command.messenger_failed_messages_show')
1765-
->replaceArgument(0, $config['failure_transport']);
1766-
$container->getDefinition('console.command.messenger_failed_messages_purge')
1767-
->replaceArgument(0, $config['failure_transport']);
1764+
if ($config['failure_transport']) {
1765+
$container->getDefinition('console.command.messenger_failed_messages_retry')
1766+
->replaceArgument(0, $config['failure_transport'])
1767+
->replaceArgument(4, $transportRetryReferences[$config['failure_transport']] ?? null);
1768+
$container->getDefinition('console.command.messenger_failed_messages_show')
1769+
->replaceArgument(0, $config['failure_transport']);
1770+
$container->getDefinition('console.command.messenger_failed_messages_purge')
1771+
->replaceArgument(0, $config['failure_transport']);
1772+
} else {
1773+
$container->removeDefinition('console.command.messenger_failed_messages_retry');
1774+
$container->removeDefinition('console.command.messenger_failed_messages_show');
1775+
$container->removeDefinition('console.command.messenger_failed_messages_purge');
1776+
}
17681777
}
17691778

17701779
private function registerCacheConfiguration(array $config, ContainerBuilder $container)

src/Symfony/Bundle/FrameworkBundle/Resources/config/messenger.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@
9393
<service id="messenger.failure.send_failed_message_to_failed_transport_listener" class="Symfony\Component\Messenger\EventListener\SendFailedMessageToFailedTransportListener">
9494
<tag name="kernel.event_subscriber" />
9595
<tag name="monolog.logger" channel="messenger" />
96-
<argument /> <!-- Message bus locator -->
96+
<argument type="service" id="messenger.routable_message_bus" />
9797
<argument /> <!-- Failed transport name -->
9898
<argument type="service" id="logger" on-invalid="ignore" />
9999
</service>

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor
328328
'enabled' => !class_exists(FullStack::class) && interface_exists(MessageBusInterface::class),
329329
'routing' => [],
330330
'transports' => [],
331+
'failure_transport' => null,
331332
'default_serializer' => 'messenger.transport.native_php_serializer',
332333
'symfony_serializer' => [
333334
'format' => 'json',

src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/FrameworkExtensionTest.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -707,12 +707,16 @@ public function testMessengerRouting()
707707
'*' => false,
708708
];
709709

710-
$this->assertSame($messageToSendAndHandleMapping, $senderLocatorDefinition->getArgument(1));
710+
$this->assertSame($messageToSendAndHandleMapping, $senderLocatorDefinition->getArgument(2));
711711
$sendersMapping = $senderLocatorDefinition->getArgument(0);
712712
$this->assertEquals([
713-
'amqp' => new Reference('messenger.transport.amqp'),
714-
'audit' => new Reference('audit'),
715-
], $sendersMapping[DummyMessage::class]->getValues());
713+
'amqp',
714+
'audit',
715+
], $sendersMapping[DummyMessage::class]);
716+
$sendersLocator = $container->getDefinition((string) $senderLocatorDefinition->getArgument(1));
717+
$this->assertSame(['amqp', 'audit'], array_keys($sendersLocator->getArgument(0)));
718+
$this->assertEquals(new Reference('messenger.transport.amqp'), $sendersLocator->getArgument(0)['amqp']->getValues()[0]);
719+
$this->assertEquals(new Reference('audit'), $sendersLocator->getArgument(0)['audit']->getValues()[0]);
716720
}
717721

718722
public function testMessengerTransportConfiguration()

src/Symfony/Component/Messenger/Command/ConsumeMessagesCommand.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,10 @@ public function __construct(ContainerInterface $busLocator, ContainerInterface $
5353
{
5454
if (\is_array($retryStrategyLocator)) {
5555
@trigger_error(sprintf('The 5th argument of the class "%s" should be a retry-strategy locator, an array of bus names as a value is deprecated since Symfony 4.3.', __CLASS__), E_USER_DEPRECATED);
56+
5657
$retryStrategyLocator = null;
5758
}
59+
5860
$this->busLocator = $busLocator;
5961
$this->receiverLocator = $receiverLocator;
6062
$this->logger = $logger;

src/Symfony/Component/Messenger/Command/FailedMessagesPurgeCommand.php

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use Symfony\Component\Console\Output\OutputInterface;
2020
use Symfony\Component\Console\Style\SymfonyStyle;
2121
use Symfony\Component\Messenger\Transport\Receiver\ListableReceiverInterface;
22+
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
2223

2324
/**
2425
* @author Ryan Weaver <[email protected]>
@@ -44,6 +45,10 @@ protected function configure(): void
4445
The <info>%command.name%</info> removes message that are waiting in the failure transport.
4546
4647
<info>php %command.full_name%</info>
48+
49+
Or remove a specific id, which can be found via the messenger:failed:show command:
50+
51+
<info>php %command.full_name% {id}</info>
4752
EOF
4853
)
4954
;
@@ -58,10 +63,6 @@ protected function execute(InputInterface $input, OutputInterface $output)
5863

5964
$receiver = $this->getReceiver();
6065

61-
if (!$receiver instanceof ListableReceiverInterface) {
62-
throw new RuntimeException(sprintf('The "%s" receiver does not support deleting one or all messages.', $this->getReceiverName()));
63-
}
64-
6566
$shouldForce = $input->getOption('force');
6667
if (null === $id = $input->getArgument('id')) {
6768
$this->removeAllMessages($receiver, $io, $shouldForce);
@@ -70,8 +71,12 @@ protected function execute(InputInterface $input, OutputInterface $output)
7071
}
7172
}
7273

73-
private function removeSingleMessage($id, ListableReceiverInterface $receiver, SymfonyStyle $io, bool $shouldForce)
74+
private function removeSingleMessage($id, ReceiverInterface $receiver, SymfonyStyle $io, bool $shouldForce)
7475
{
76+
if (!$receiver instanceof ListableReceiverInterface) {
77+
throw new RuntimeException(sprintf('The "%s" receiver does not support removing specific messages.', $this->getReceiverName()));
78+
}
79+
7580
$envelope = $receiver->find($id);
7681
if (null === $envelope) {
7782
throw new RuntimeException(sprintf('The message with id "%s" was not found.', $id));
@@ -87,7 +92,7 @@ private function removeSingleMessage($id, ListableReceiverInterface $receiver, S
8792
}
8893
}
8994

90-
private function removeAllMessages(ListableReceiverInterface $receiver, SymfonyStyle $io, bool $shouldForce)
95+
private function removeAllMessages(ReceiverInterface $receiver, SymfonyStyle $io, bool $shouldForce)
9196
{
9297
if ($shouldForce || $io->confirm('Do you want to permanently remove ALL failed messages ?', false)) {
9398
$receiver->purge();

src/Symfony/Component/Messenger/Command/FailedMessagesRetryCommand.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
namespace Symfony\Component\Messenger\Command;
1313

14-
use Psr\Container\ContainerInterface;
1514
use Psr\Log\LoggerInterface;
1615
use Symfony\Component\Console\Exception\RuntimeException;
1716
use Symfony\Component\Console\Input\InputArgument;
@@ -25,7 +24,6 @@
2524
use Symfony\Component\Messenger\Event\WorkerMessageReceivedEvent;
2625
use Symfony\Component\Messenger\MessageBusInterface;
2726
use Symfony\Component\Messenger\Retry\RetryStrategyInterface;
28-
use Symfony\Component\Messenger\RoutableMessageBus;
2927
use Symfony\Component\Messenger\Transport\Receiver\ListableReceiverInterface;
3028
use Symfony\Component\Messenger\Transport\Receiver\MessageCountAwareInterface;
3129
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;

src/Symfony/Component/Messenger/Command/FailedMessagesShowCommand.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ protected function configure(): void
4646
The <info>%command.name%</info> shows message that are waiting in the failure transport.
4747
4848
<info>php %command.full_name%</info>
49+
50+
Or look at a specific message by its id:
51+
52+
<info>php %command.full_name% {id}</info>
4953
EOF
5054
)
5155
;

src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ private function registerReceivers(ContainerBuilder $container, array $busIds)
253253

254254
if ($container->hasDefinition('console.command.messenger_consume_messages')) {
255255
$container->getDefinition('console.command.messenger_consume_messages')
256+
->replaceArgument(0, ServiceLocatorTagPass::register($container, $buses))
256257
->replaceArgument(3, array_values($receiverNames));
257258
}
258259

@@ -263,11 +264,6 @@ private function registerReceivers(ContainerBuilder $container, array $busIds)
263264

264265
$container->getDefinition('messenger.receiver_locator')->replaceArgument(0, $receiverMapping);
265266

266-
if ($container->hasDefinition('messenger.failure.send_failed_message_to_failed_transport_listener')) {
267-
$container->getDefinition('messenger.failure.send_failed_message_to_failed_transport_listener')
268-
->replaceArgument(0, ServiceLocatorTagPass::register($container, $buses));
269-
}
270-
271267
$failedCommandIds = [
272268
'console.command.messenger_failed_messages_retry',
273269
'console.command.messenger_failed_messages_show',

src/Symfony/Component/Messenger/Tests/Stamp/SentToFailedTransportStampTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\Debug\Exception\FlattenException;
16-
use Symfony\Component\Messenger\Stamp\RedeliveryStamp;
1716
use Symfony\Component\Messenger\Stamp\SentToFailedTransportStamp;
1817

1918
class SentToFailedTransportStampTest extends TestCase

src/Symfony/Component/Messenger/Tests/Transport/Sender/SendersLocatorTest.php

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
use PHPUnit\Framework\TestCase;
1515
use Psr\Container\ContainerInterface;
1616
use Symfony\Component\Messenger\Envelope;
17-
use Symfony\Component\Messenger\Exception\InvalidArgumentException;
17+
use Symfony\Component\Messenger\Exception\UnknownSenderException;
1818
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
1919
use Symfony\Component\Messenger\Tests\Fixtures\SecondMessage;
2020
use Symfony\Component\Messenger\Transport\Sender\SenderInterface;
@@ -53,7 +53,7 @@ public function testGetSenderByAlias()
5353

5454
public function testGetSenderByAliasThrowsException()
5555
{
56-
$this->expectException(InvalidArgumentException::class);
56+
$this->expectException(UnknownSenderException::class);
5757
$this->expectExceptionMessage('Unknown sender alias');
5858

5959
$sender1 = $this->getMockBuilder(SenderInterface::class)->getMock();
@@ -65,6 +65,31 @@ public function testGetSenderByAliasThrowsException()
6565
$locator->getSenderByAlias('sender2');
6666
}
6767

68+
/**
69+
* @group legacy
70+
*/
71+
public function testItReturnsTheSenderBasedOnTheMessageClassLegacy()
72+
{
73+
$sender = $this->getMockBuilder(SenderInterface::class)->getMock();
74+
$locator = new SendersLocator([
75+
DummyMessage::class => [$sender],
76+
]);
77+
$this->assertSame([$sender], iterator_to_array($locator->getSenders(new Envelope(new DummyMessage('a')))));
78+
$this->assertSame([], iterator_to_array($locator->getSenders(new Envelope(new SecondMessage()))));
79+
}
80+
81+
/**
82+
* @group legacy
83+
*/
84+
public function testItYieldsProvidedSenderAliasAsKeyLegacy()
85+
{
86+
$sender = $this->getMockBuilder(SenderInterface::class)->getMock();
87+
$locator = new SendersLocator([
88+
DummyMessage::class => ['dummy' => $sender],
89+
]);
90+
$this->assertSame(['dummy' => $sender], iterator_to_array($locator->getSenders(new Envelope(new DummyMessage('a')))));
91+
}
92+
6893
private function createContainer(array $senders)
6994
{
7095
$container = $this->createMock(ContainerInterface::class);

src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,13 @@ public static function buildConfiguration($dsn, array $options = [])
8787
// check for extra keys in options
8888
$optionsExtraKeys = array_diff(array_keys($options), array_keys($configuration));
8989
if (0 < \count($optionsExtraKeys)) {
90-
throw new TransportException(sprintf('Unknown option found : [%s]. Allowed options are [%s]', implode(', ', $optionsExtraKeys), implode(', ', self::DEFAULT_OPTIONS)));
90+
throw new InvalidArgumentException(sprintf('Unknown option found : [%s]. Allowed options are [%s]', implode(', ', $optionsExtraKeys), implode(', ', self::DEFAULT_OPTIONS)));
9191
}
9292

9393
// check for extra keys in options
9494
$queryExtraKeys = array_diff(array_keys($query), array_keys($configuration));
9595
if (0 < \count($queryExtraKeys)) {
96-
throw new TransportException(sprintf('Unknown option found in DSN: [%s]. Allowed options are [%s]', implode(', ', $queryExtraKeys), implode(', ', self::DEFAULT_OPTIONS)));
96+
throw new InvalidArgumentException(sprintf('Unknown option found in DSN: [%s]. Allowed options are [%s]', implode(', ', $queryExtraKeys), implode(', ', self::DEFAULT_OPTIONS)));
9797
}
9898

9999
return $configuration;

src/Symfony/Component/Messenger/Transport/Sender/SendersLocator.php

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Component\Messenger\Transport\Sender;
1313

1414
use Psr\Container\ContainerInterface;
15+
use Symfony\Component\DependencyInjection\ServiceLocator;
1516
use Symfony\Component\Messenger\Envelope;
1617
use Symfony\Component\Messenger\Exception\RuntimeException;
1718
use Symfony\Component\Messenger\Exception\UnknownSenderException;
@@ -28,18 +29,27 @@ class SendersLocator implements SendersLocatorInterface
2829
{
2930
private $sendersMap;
3031
private $sendersLocator;
32+
private $useLegacyLookup = false;
3133
private $sendAndHandle;
3234

3335
/**
3436
* @param string[][] $sendersMap An array, keyed by "type", set to an array of sender aliases
3537
* @param ContainerInterface Locator of senders, keyed by sender alias
3638
* @param bool[] $sendAndHandle
3739
*/
38-
public function __construct(array $sendersMap, ContainerInterface $sendersLocator, array $sendAndHandle = [])
40+
public function __construct(array $sendersMap, /*ContainerInterface*/ $sendersLocator = null, array $sendAndHandle = [])
3941
{
4042
$this->sendersMap = $sendersMap;
41-
$this->sendersLocator = $sendersLocator;
42-
$this->sendAndHandle = $sendAndHandle;
43+
44+
if (is_array($sendersLocator) || null === $sendersLocator) {
45+
@trigger_error(sprintf('The 2nd argument to "%s::__construct()" requires ContainerInterface 2nd argument. Not passing that was deprecated in Symfony 4.3 and will be required in Symfony 5.0.', __CLASS__), E_USER_DEPRECATED);
46+
$this->sendersLocator = new ServiceLocator([]);
47+
$this->sendAndHandle = $sendersLocator;
48+
$this->useLegacyLookup = true;
49+
} else {
50+
$this->sendersLocator = $sendersLocator;
51+
$this->sendAndHandle = $sendAndHandle;
52+
}
4353
}
4454

4555
/**
@@ -52,6 +62,19 @@ public function getSenders(Envelope $envelope, ?bool &$handle = false): iterable
5262
$seen = [];
5363

5464
foreach (HandlersLocator::listTypes($envelope) as $type) {
65+
// the old way of looking up senders
66+
if ($this->useLegacyLookup) {
67+
foreach ($this->sendersMap[$type] ?? [] as $alias => $sender) {
68+
if (!\in_array($sender, $seen, true)) {
69+
yield $alias => $seen[] = $sender;
70+
}
71+
}
72+
73+
$handle = $handle ?: $this->sendAndHandle[$type] ?? false;
74+
75+
continue;
76+
}
77+
5578
foreach ($this->sendersMap[$type] ?? [] as $senderAlias) {
5679
if (!\in_array($senderAlias, $seen, true)) {
5780
if (false === $this->sendersLocator->has($senderAlias)) {

src/Symfony/Component/Messenger/composer.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"doctrine/dbal": "^2.5",
2424
"psr/cache": "~1.0",
2525
"symfony/console": "~3.4|~4.0",
26-
"symfony/debug": "~3.4|~4.0",
26+
"symfony/debug": "~4.1",
2727
"symfony/dependency-injection": "~3.4.19|^4.1.8",
2828
"symfony/doctrine-bridge": "~3.4|~4.0",
2929
"symfony/event-dispatcher": "~4.3",
@@ -36,7 +36,8 @@
3636
"symfony/var-dumper": "~3.4|~4.0"
3737
},
3838
"conflict": {
39-
"symfony/event-dispatcher": "<4.3"
39+
"symfony/event-dispatcher": "<4.3",
40+
"symfony/debug": "<4.1"
4041
},
4142
"suggest": {
4243
"enqueue/messenger-adapter": "For using the php-enqueue library as a transport."

0 commit comments

Comments
 (0)