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

Skip to content

Commit 9cd88b0

Browse files
[Messenger] make senders/handlers locator accept envelopes
1 parent b142eae commit 9cd88b0

File tree

10 files changed

+26
-31
lines changed

10 files changed

+26
-31
lines changed

src/Symfony/Component/Messenger/Envelope.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,4 @@ public function getMessage()
7474
{
7575
return $this->message;
7676
}
77-
78-
public function getMessageName(): string
79-
{
80-
return \get_class($this->message);
81-
}
8277
}

src/Symfony/Component/Messenger/Handler/HandlersLocator.php

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

1212
namespace Symfony\Component\Messenger\Handler;
1313

14+
use Symfony\Component\Messenger\Envelope;
15+
1416
/**
1517
* Maps a message to a list of handlers.
1618
*
@@ -33,11 +35,11 @@ public function __construct(array $handlers)
3335
/**
3436
* {@inheritdoc}
3537
*/
36-
public function getHandlers(string $name): iterable
38+
public function getHandlers(Envelope $envelope): iterable
3739
{
3840
$seen = array();
3941

40-
foreach (self::listTypes($name) as $type) {
42+
foreach (self::listTypes($envelope) as $type) {
4143
foreach ($this->handlers[$type] ?? array() as $handler) {
4244
if (!\in_array($handler, $seen, true)) {
4345
yield $seen[] = $handler;
@@ -49,11 +51,9 @@ public function getHandlers(string $name): iterable
4951
/**
5052
* @internal
5153
*/
52-
public static function listTypes(string $class): array
54+
public static function listTypes(Envelope $envelope): array
5355
{
54-
if (!class_exists($class, false)) {
55-
return array($class => $class, '*' => '*');
56-
}
56+
$class = \get_class($envelope->getMessage());
5757

5858
return array($class => $class)
5959
+ class_parents($class)

src/Symfony/Component/Messenger/Handler/HandlersLocatorInterface.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
namespace Symfony\Component\Messenger\Handler;
1313

14+
use Symfony\Component\Messenger\Envelope;
15+
1416
/**
1517
* Maps a message to a list of handlers.
1618
*
@@ -25,5 +27,5 @@ interface HandlersLocatorInterface
2527
*
2628
* @return iterable|callable[]
2729
*/
28-
public function getHandlers(string $name): iterable;
30+
public function getHandlers(Envelope $envelope): iterable;
2931
}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,11 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope
4040
{
4141
$handler = null;
4242
$message = $envelope->getMessage();
43-
$name = $envelope->getMessageName();
44-
foreach ($this->handlersLocator->getHandlers($name) as $handler) {
43+
foreach ($this->handlersLocator->getHandlers($envelope) as $handler) {
4544
$handler($message);
4645
}
4746
if (null === $handler && !$this->allowNoHandlers) {
48-
throw new NoHandlerForMessageException(sprintf('No handler for message "%s".', $name));
47+
throw new NoHandlerForMessageException(sprintf('No handler for message "%s".', \get_class($envelope->getMessage())));
4948
}
5049

5150
return $stack->next()->handle($envelope, $stack);

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,20 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope
3636
$message = $envelope->getMessage();
3737
$context = array(
3838
'message' => $message,
39-
'name' => $envelope->getMessageName(),
39+
'class' => \get_class($envelope->getMessage()),
4040
);
41-
$this->logger->debug('Starting handling message "{name}"', $context);
41+
$this->logger->debug('Starting handling message "{class}"', $context);
4242

4343
try {
4444
$envelope = $stack->next()->handle($envelope, $stack);
4545
} catch (\Throwable $e) {
4646
$context['exception'] = $e;
47-
$this->logger->warning('An exception occurred while handling message "{name}"', $context);
47+
$this->logger->warning('An exception occurred while handling message "{class}"', $context);
4848

4949
throw $e;
5050
}
5151

52-
$this->logger->debug('Finished handling message "{name}"', $context);
52+
$this->logger->debug('Finished handling message "{class}"', $context);
5353

5454
return $envelope;
5555
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope
4242
$handle = false;
4343
$sender = null;
4444

45-
foreach ($this->sendersLocator->getSenders($envelope->getMessageName(), $handle) as $sender) {
45+
foreach ($this->sendersLocator->getSenders($envelope, $handle) as $sender) {
4646
$envelope = $sender->send($envelope);
4747
}
4848

src/Symfony/Component/Messenger/Tests/Transport/AmqpExt/Fixtures/long_receiver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
$worker = new Worker($receiver, new class() implements MessageBusInterface {
3333
public function dispatch($envelope): Envelope
3434
{
35-
echo 'Get envelope with message: '.$envelope->getMessageName()."\n";
35+
echo 'Get envelope with message: '.\get_class($envelope->getMessage())."\n";
3636
echo sprintf("with stamps: %s\n", json_encode(array_keys($envelope->all()), JSON_PRETTY_PRINT));
3737

3838
sleep(30);

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212
namespace Symfony\Component\Messenger\Tests\Transport\Sender;
1313

1414
use PHPUnit\Framework\TestCase;
15-
use Symfony\Component\Messenger\Exception\RuntimeException;
15+
use Symfony\Component\Messenger\Envelope;
1616
use Symfony\Component\Messenger\Tests\Fixtures\DummyMessage;
1717
use Symfony\Component\Messenger\Tests\Fixtures\SecondMessage;
18-
use Symfony\Component\Messenger\Transport\Sender\SendersLocator;
1918
use Symfony\Component\Messenger\Transport\Sender\SenderInterface;
19+
use Symfony\Component\Messenger\Transport\Sender\SendersLocator;
2020

2121
class SendersLocatorTest extends TestCase
2222
{
@@ -27,7 +27,7 @@ public function testItReturnsTheSenderBasedOnTheMessageClass()
2727
DummyMessage::class => array($sender),
2828
));
2929

30-
$this->assertSame(array($sender), iterator_to_array($locator->getSenders(DummyMessage::class)));
31-
$this->assertSame(array(), iterator_to_array($locator->getSenders(SecondMessage::class)));
30+
$this->assertSame(array($sender), iterator_to_array($locator->getSenders(new Envelope(new DummyMessage('a')))));
31+
$this->assertSame(array(), iterator_to_array($locator->getSenders(new Envelope(new SecondMessage('b')))));
3232
}
3333
}

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@
1111

1212
namespace Symfony\Component\Messenger\Transport\Sender;
1313

14-
use Symfony\Component\Messenger\Exception\RuntimeException;
14+
use Symfony\Component\Messenger\Envelope;
1515
use Symfony\Component\Messenger\Handler\HandlersLocator;
16-
use Symfony\Component\Messenger\Transport\Sender\SenderInterface;
1716

1817
/**
1918
* Maps a message to a list of senders.
@@ -40,13 +39,13 @@ public function __construct(array $senders, array $sendAndHandle = array())
4039
/**
4140
* {@inheritdoc}
4241
*/
43-
public function getSenders(string $name, ?bool &$handle = false): iterable
42+
public function getSenders(Envelope $envelope, ?bool &$handle = false): iterable
4443
{
4544
$handle = false;
4645
$sender = null;
4746
$seen = array();
4847

49-
foreach (HandlersLocator::listTypes($name) as $type) {
48+
foreach (HandlersLocator::listTypes($envelope) as $type) {
5049
foreach ($this->senders[$type] ?? array() as $sender) {
5150
if (!\in_array($sender, $seen, true)) {
5251
yield $seen[] = $sender;

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

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

1212
namespace Symfony\Component\Messenger\Transport\Sender;
1313

14-
use Symfony\Component\Messenger\Transport\Sender\SenderInterface;
14+
use Symfony\Component\Messenger\Envelope;
1515

1616
/**
1717
* Maps a message to a list of senders.
@@ -31,5 +31,5 @@ interface SendersLocatorInterface
3131
*
3232
* @return iterable|SenderInterface[]
3333
*/
34-
public function getSenders(string $name, ?bool &$handle = false): iterable;
34+
public function getSenders(Envelope $envelope, ?bool &$handle = false): iterable;
3535
}

0 commit comments

Comments
 (0)