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

Skip to content

Commit f1169bb

Browse files
committed
[Messenger] Consume a PSR-14 dispatcher for dispatching events
1 parent c9a5155 commit f1169bb

File tree

6 files changed

+65
-14
lines changed

6 files changed

+65
-14
lines changed

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@
1111
namespace Symfony\Component\Messenger\EventListener;
1212

1313
use Psr\Container\ContainerInterface;
14+
use Psr\EventDispatcher\EventDispatcherInterface;
1415
use Psr\Log\LoggerInterface;
16+
use Symfony\Component\EventDispatcher\Event;
1517
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
18+
use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy;
1619
use Symfony\Component\Messenger\Envelope;
1720
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
1821
use Symfony\Component\Messenger\Event\WorkerMessageRetriedEvent;
@@ -25,7 +28,7 @@
2528
use Symfony\Component\Messenger\Stamp\RedeliveryStamp;
2629
use Symfony\Component\Messenger\Stamp\StampInterface;
2730
use Symfony\Component\Messenger\Transport\Sender\SenderInterface;
28-
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
31+
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface as SymfonyEventDispatcherInterface;
2932

3033
/**
3134
* @author Tobias Schultze <http://tobion.de>
@@ -38,8 +41,19 @@ class SendFailedMessageForRetryListener implements EventSubscriberInterface
3841
private $eventDispatcher;
3942
private $historySize;
4043

41-
public function __construct(ContainerInterface $sendersLocator, ContainerInterface $retryStrategyLocator, LoggerInterface $logger = null, EventDispatcherInterface $eventDispatcher = null, int $historySize = 10)
44+
/**
45+
* @param EventDispatcherInterface|SymfonyEventDispatcherInterface|null $eventDispatcher
46+
*/
47+
public function __construct(ContainerInterface $sendersLocator, ContainerInterface $retryStrategyLocator, LoggerInterface $logger = null, object $eventDispatcher = null, int $historySize = 10)
4248
{
49+
if ($eventDispatcher instanceof SymfonyEventDispatcherInterface) {
50+
if (class_exists(Event::class)) {
51+
$eventDispatcher = LegacyEventDispatcherProxy::decorate($eventDispatcher);
52+
}
53+
} elseif (null !== $eventDispatcher && !$eventDispatcher instanceof EventDispatcherInterface) {
54+
throw new \TypeError(__METHOD__.sprintf(': Parameter $eventDispatcher expected to be either null or an instance of "%s" or "%s", "%s" given.', EventDispatcherInterface::class, SymfonyEventDispatcherInterface::class, get_debug_type($eventDispatcher)));
55+
}
56+
4357
$this->sendersLocator = $sendersLocator;
4458
$this->retryStrategyLocator = $retryStrategyLocator;
4559
$this->logger = $logger;

src/Symfony/Component/Messenger/Middleware/SendMessageMiddleware.php

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

1212
namespace Symfony\Component\Messenger\Middleware;
1313

14+
use Psr\EventDispatcher\EventDispatcherInterface;
1415
use Psr\Log\LoggerAwareTrait;
1516
use Psr\Log\NullLogger;
1617
use Symfony\Component\EventDispatcher\Event;
@@ -20,7 +21,7 @@
2021
use Symfony\Component\Messenger\Stamp\ReceivedStamp;
2122
use Symfony\Component\Messenger\Stamp\SentStamp;
2223
use Symfony\Component\Messenger\Transport\Sender\SendersLocatorInterface;
23-
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
24+
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface as SymfonyEventDispatcherInterface;
2425

2526
/**
2627
* @author Samuel Roze <[email protected]>
@@ -33,10 +34,21 @@ class SendMessageMiddleware implements MiddlewareInterface
3334
private $sendersLocator;
3435
private $eventDispatcher;
3536

36-
public function __construct(SendersLocatorInterface $sendersLocator, EventDispatcherInterface $eventDispatcher = null)
37+
/**
38+
* @param EventDispatcherInterface|SymfonyEventDispatcherInterface|null $eventDispatcher
39+
*/
40+
public function __construct(SendersLocatorInterface $sendersLocator, object $eventDispatcher = null)
3741
{
42+
if ($eventDispatcher instanceof SymfonyEventDispatcherInterface) {
43+
if (class_exists(Event::class)) {
44+
$eventDispatcher = LegacyEventDispatcherProxy::decorate($eventDispatcher);
45+
}
46+
} elseif (null !== $eventDispatcher && !$eventDispatcher instanceof EventDispatcherInterface) {
47+
throw new \TypeError(__METHOD__.sprintf(': Parameter $eventDispatcher expected to be either null or an instance of "%s" or "%s", "%s" given.', EventDispatcherInterface::class, SymfonyEventDispatcherInterface::class, get_debug_type($eventDispatcher)));
48+
}
49+
3850
$this->sendersLocator = $sendersLocator;
39-
$this->eventDispatcher = class_exists(Event::class) ? LegacyEventDispatcherProxy::decorate($eventDispatcher) : $eventDispatcher;
51+
$this->eventDispatcher = $eventDispatcher;
4052
$this->logger = new NullLogger();
4153
}
4254

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

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

1414
use PHPUnit\Framework\TestCase;
1515
use Psr\Container\ContainerInterface;
16+
use Psr\EventDispatcher\EventDispatcherInterface;
1617
use Symfony\Component\Messenger\Envelope;
1718
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
1819
use Symfony\Component\Messenger\EventListener\SendFailedMessageForRetryListener;
@@ -21,7 +22,6 @@
2122
use Symfony\Component\Messenger\Stamp\DelayStamp;
2223
use Symfony\Component\Messenger\Stamp\RedeliveryStamp;
2324
use Symfony\Component\Messenger\Transport\Sender\SenderInterface;
24-
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
2525

2626
class SendFailedMessageForRetryListenerTest extends TestCase
2727
{

src/Symfony/Component/Messenger/Tests/Middleware/SendMessageMiddlewareTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Component\Messenger\Tests\Middleware;
1313

1414
use Psr\Container\ContainerInterface;
15+
use Psr\EventDispatcher\EventDispatcherInterface;
1516
use Symfony\Component\Messenger\Envelope;
1617
use Symfony\Component\Messenger\Event\SendMessageToTransportsEvent;
1718
use Symfony\Component\Messenger\Middleware\SendMessageMiddleware;
@@ -23,7 +24,6 @@
2324
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessageInterface;
2425
use Symfony\Component\Messenger\Transport\Sender\SenderInterface;
2526
use Symfony\Component\Messenger\Transport\Sender\SendersLocator;
26-
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
2727

2828
class SendMessageMiddlewareTest extends MiddlewareTestCase
2929
{

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

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

1414
use PHPUnit\Framework\TestCase;
15+
use Psr\EventDispatcher\EventDispatcherInterface;
1516
use Psr\Log\LoggerInterface;
1617
use Symfony\Component\EventDispatcher\EventDispatcher;
1718
use Symfony\Component\Messenger\Envelope;
@@ -39,7 +40,6 @@
3940
use Symfony\Component\Messenger\Transport\Receiver\QueueReceiverInterface;
4041
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
4142
use Symfony\Component\Messenger\Worker;
42-
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
4343
use Symfony\Contracts\Service\ResetInterface;
4444

4545
/**
@@ -65,8 +65,23 @@ public function testWorkerDispatchTheReceivedMessage()
6565
return $envelopes[] = $envelope;
6666
});
6767

68-
$dispatcher = new EventDispatcher();
69-
$dispatcher->addSubscriber(new StopWorkerOnMessageLimitListener(2));
68+
$dispatcher = new class() implements EventDispatcherInterface {
69+
private $listener;
70+
71+
public function __construct()
72+
{
73+
$this->listener = new StopWorkerOnMessageLimitListener(2);
74+
}
75+
76+
public function dispatch(object $event): object
77+
{
78+
if ($event instanceof WorkerRunningEvent) {
79+
$this->listener->onWorkerRunning($event);
80+
}
81+
82+
return $event;
83+
}
84+
};
7085

7186
$worker = new Worker(['transport' => $receiver], $bus, $dispatcher);
7287
$worker->run();

src/Symfony/Component/Messenger/Worker.php

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

1212
namespace Symfony\Component\Messenger;
1313

14+
use Psr\EventDispatcher\EventDispatcherInterface;
1415
use Psr\Log\LoggerInterface;
1516
use Symfony\Component\EventDispatcher\Event;
1617
use Symfony\Component\EventDispatcher\LegacyEventDispatcherProxy;
@@ -30,7 +31,7 @@
3031
use Symfony\Component\Messenger\Stamp\ReceivedStamp;
3132
use Symfony\Component\Messenger\Transport\Receiver\QueueReceiverInterface;
3233
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
33-
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
34+
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface as SymfonyEventDispatcherInterface;
3435
use Symfony\Contracts\Service\ResetInterface;
3536

3637
/**
@@ -51,14 +52,23 @@ class Worker
5152
private $unacks;
5253

5354
/**
54-
* @param ReceiverInterface[] $receivers Where the key is the transport name
55+
* @param ReceiverInterface[] $receivers Where the key is the transport name
56+
* @param EventDispatcherInterface|SymfonyEventDispatcherInterface|null $eventDispatcher
5557
*/
56-
public function __construct(array $receivers, MessageBusInterface $bus, EventDispatcherInterface $eventDispatcher = null, LoggerInterface $logger = null)
58+
public function __construct(array $receivers, MessageBusInterface $bus, object $eventDispatcher = null, LoggerInterface $logger = null)
5759
{
60+
if ($eventDispatcher instanceof SymfonyEventDispatcherInterface) {
61+
if (class_exists(Event::class)) {
62+
$eventDispatcher = LegacyEventDispatcherProxy::decorate($eventDispatcher);
63+
}
64+
} elseif (null !== $eventDispatcher && !$eventDispatcher instanceof EventDispatcherInterface) {
65+
throw new \TypeError(__METHOD__.sprintf(': Parameter $eventDispatcher expected to be either null or an instance of "%s" or "%s", "%s" given.', EventDispatcherInterface::class, SymfonyEventDispatcherInterface::class, get_debug_type($eventDispatcher)));
66+
}
67+
5868
$this->receivers = $receivers;
5969
$this->bus = $bus;
6070
$this->logger = $logger;
61-
$this->eventDispatcher = class_exists(Event::class) ? LegacyEventDispatcherProxy::decorate($eventDispatcher) : $eventDispatcher;
71+
$this->eventDispatcher = $eventDispatcher;
6272
$this->metadata = new WorkerMetadata([
6373
'transportNames' => array_keys($receivers),
6474
]);

0 commit comments

Comments
 (0)