8000 [WIP] Simplifying SyncTransport and fixing bug with handlers transport · symfony/symfony@3871592 · GitHub
[go: up one dir, main page]

Skip to content

Commit 3871592

Browse files
committed
[WIP] Simplifying SyncTransport and fixing bug with handlers transport
1 parent b2f5b8a commit 3871592

File tree

< 8000 button data-component="IconButton" type="button" data-testid="collapse-file-tree-button" aria-expanded="true" aria-controls="diff_file_tree" data-analytics-opt-out="true" class="prc-Button-ButtonBase-c50BI d-none d-md-flex position-relative fgColor-muted prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-describedby=":Rcatdab:-loading-announcement" aria-labelledby="expand-button-file-tree-button">

7 files changed

+29
-58
lines changed

7 files changed

+29
-58
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373

7474
<service id="messenger.transport.sync.factory" class="Symfony\Component\Messenger\Transport\Sync\SyncTransportFactory">
7575
<tag name="messenger.transport_factory" />
76+
<argument type="service" id="messenger.routable_message_bus" />
7677
</service>
7778

7879
<service id="messenger.transport.in_memory.factory" class="Symfony\Component\Messenger\Transport\InMemoryTransportFactory">

src/Symfony/Component/Messenger/CHANGELOG.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ CHANGELOG
2424
to stop all `messenger:consume` workers.
2525
* [BC BREAK] The `TransportFactoryInterface::createTransport()` signature
2626
changed: a required 3rd `SerializerInterface` argument was added.
27-
* Added a new `SyncTransport` along with `ForceCallHandlersStamp` to
28-
explicitly handle messages synchronously.
27+
* Added a new `SyncTransport` to explicitly handle messages synchronously.
2928
* Added `AmqpStamp` allowing to provide a routing key, flags and attributes on message publishing.
3029
* [BC BREAK] Removed publishing with a `routing_key` option from queue configuration, for
3130
AMQP. Use exchange `default_publish_routing_key` or `AmqpStamp` instead.

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
use Psr\Log\NullLogger;
1616
use Symfony\Component\Messenger\Envelope;
1717
use Symfony\Component\Messenger\Event\SendMessageToTransportsEvent;
18-
use Symfony\Component\Messenger\Stamp\ForceCallHandlersStamp;
1918
use Symfony\Component\Messenger\Stamp\ReceivedStamp;
2019
use Symfony\Component\Messenger\Stamp\RedeliveryStamp;
2120
use Symfony\Component\Messenger\Stamp\SentStamp;
@@ -78,12 +77,6 @@ public function handle(Envelope $envelope, StackInterface $stack): Envelope
7877
$envelope = $sender->send($envelope->with(new SentStamp(\get_class($sender), \is_string($alias) ? $alias : null)));
7978
}
8079

81-
// if the message was marked (usually by SyncTransport) that it handlers
82-
// MUST be called, mark them to be handled.
83-
if (null !== $envelope->last(ForceCallHandlersStamp::class)) {
84-
$handle = true;
85-
}
86-
8780
// on a redelivery, only send back to queue: never call local handlers
8881
if (null !== $redeliveryStamp) {
8982
$handle = false;

src/Symfony/Component/Messenger/Stamp/ForceCallHandlersStamp.php

Lines changed: 0 additions & 27 deletions
This file was deleted.

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

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
use Symfony\Component\Messenger\Envelope;
1616
use Symfony\Component\Messenger\Event\SendMessageToTransportsEvent;
1717
use Symfony\Component\Messenger\Middleware\SendMessageMiddleware;
18-
use Symfony\Component\Messenger\Stamp\ForceCallHandlersStamp;
1918
use Symfony\Component\Messenger\Stamp\ReceivedStamp;
2019
use Symfony\Component\Messenger\Stamp\RedeliveryStamp;
2120
use Symfony\Component\Messenger\Stamp\SentStamp;
@@ -88,8 +87,6 @@ public function testItSendsTheMessageToMultipleSenders()
8887
public function testItSendsToOnlyOneSenderOnRedelivery()
8988
{
9089
$envelope = new Envelope(new DummyMessage('Hey'), [new RedeliveryStamp(5, 'bar')]);
91-
// even with a ForceCallHandlersStamp, the next middleware won't be called
92-
$envelope = $envelope->with(new ForceCallHandlersStamp());
9390
$sender = $this->getMockBuilder(SenderInterface::class)->getMock();
9491
$sender2 = $this->getMockBuilder(SenderInterface::class)->getMock();
9592

@@ -270,21 +267,6 @@ public function testItDoesNotDispatchOnRedeliver()
270267
$middleware->handle($envelope, $this->getStackMock(false));
271268
}
272269

273-
public function testItHandlesWithForceCallHandlersStamp()
274< 9E88 /code>-
{
275-
$envelope = new Envelope(new DummyMessage('original envelope'));
276-
$envelope = $envelope->with(new ForceCallHandlersStamp());
277-
278-
$sender = $this->getMockBuilder(SenderInterface::class)->getMock();
279-
$sender->expects($this->once())->method('send')->willReturn($envelope);
280-
281-
$sendersLocator = $this->createSendersLocator([DummyMessage::class => ['foo']], ['foo' => $sender]);
282-
$middleware = new SendMessageMiddleware($sendersLocator);
283-
284-
// next handler *should* be called
285-
$middleware->handle($envelope, $this->getStackMock(true));
286-
}
287-
288270
private function createSendersLocator(array $sendersMap, array $senders, array $sendAndHandle = [])
289271
{
290272
$container = $this->createMock(ContainerInterface::class);

src/Symfony/Component/Messenger/Transport/Sync/SyncTransport.php

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,27 @@
1313

1414
use Symfony\Component\Messenger\Envelope;
1515
use Symfony\Component\Messenger\Exception\InvalidArgumentException;
16-
use Symfony\Component\Messenger\Stamp\ForceCallHandlersStamp;
16+
use Symfony\Component\Messenger\MessageBusInterface;
17+
use Symfony\Component\Messenger\Stamp\ReceivedStamp;
18+
use Symfony\Component\Messenger\Stamp\SentStamp;
1719
use Symfony\Component\Messenger\Transport\TransportInterface;
1820

1921
/**
20-
* A "fake" transport that marks messages to be handled immediately.
22+
* Fake transport that immediately marks messages as received and dispatches for handling.
2123
*
2224
* @experimental in 4.3
2325
*
2426
* @author Ryan Weaver <ryan@symfonycasts.com>
2527
*/
2628
class SyncTransport implements TransportInterface
2729
{
30+
private $messageBus;
31+
32+
public function __construct(MessageBusInterface $messageBus)
33+
{
34+
$this->messageBus = $messageBus;
35+
}
36+
2837
public function get(): iterable
2938
{
3039
throw new InvalidArgumentException('You cannot receive messages from the Messenger SyncTransport.');
@@ -47,6 +56,12 @@ public function reject(Envelope $envelope): void
4756

4857
public function send(Envelope $envelope): Envelope
4958
{
50-
return $envelope->with(new ForceCallHandlersStamp());
59+
/** @var SentStamp|null $sentStamp */
60+
$sentStamp = $envelope->last(SentStamp::class);
61+
$alias = null === $sentStamp ? 'sync' : $sentStamp->getSenderAlias() ?: $sentStamp->getSenderClass();
62+
63+
$envelope = $envelope->with(new ReceivedStamp($alias));
64+
65+
return $this->messageBus->dispatch($envelope);
5166
}
5267
}

src/Symfony/Component/Messenger/Transport/Sync/SyncTransportFactory.php

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

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

14+
use Symfony\Component\Messenger\MessageBusInterface;
1415
use Symfony\Component\Messenger\Transport\Serialization\SerializerInterface;
1516
use Symfony\Component\Messenger\Transport\TransportFactoryInterface;
1617
use Symfony\Component\Messenger\Transport\TransportInterface;
@@ -22,9 +23,16 @@
2223
*/
2324
class SyncTransportFactory implements TransportFactoryInterface
2425
{
26+
private $messageBus;
27+
28+
public function __construct(MessageBusInterface $messageBus)
29+
{
30+
$this->messageBus = $messageBus;
31+
}
32+
2533
public function createTransport(string $dsn, array $options, SerializerInterface $serializer): TransportInterface
2634
{
27-
return new SyncTransport();
35+
return new SyncTransport($this->messageBus);
2836
}
2937

3038
public function supports(string $dsn, array $options): bool

0 commit comments

Comments
 (0)
0