Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit917d72c

Browse files
committed
Changing how RoutableMessageBus fallback bus works
1 parentca6266d commit917d72c

File tree

3 files changed

+30
-20
lines changed

3 files changed

+30
-20
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@
106106
<!-- routable message bus-->
107107
<serviceid="messenger.routable_message_bus"class="Symfony\Component\Messenger\RoutableMessageBus">
108108
<argument /><!-- Message bus locator-->
109+
<argumenttype="service"id="messenger.default_bus" />
109110
</service>
110111
</services>
111112
</container>

‎src/Symfony/Component/Messenger/RoutableMessageBus.php‎

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,15 @@
2828
class RoutableMessageBusimplements MessageBusInterface
2929
{
3030
private$busLocator;
31+
private$fallbackBus;
3132

3233
/**
3334
* @param ContainerInterface $busLocator A locator full of MessageBusInterface objects
3435
*/
35-
publicfunction__construct(ContainerInterface$busLocator)
36+
publicfunction__construct(ContainerInterface$busLocator,MessageBusInterface$fallbackBus =null)
3637
{
3738
$this->busLocator =$busLocator;
39+
$this->fallbackBus =$fallbackBus;
3840
}
3941

4042
publicfunctiondispatch($envelope,array$stamps = []):Envelope
@@ -43,14 +45,28 @@ public function dispatch($envelope, array $stamps = []): Envelope
4345
thrownewInvalidArgumentException('Messages passed to RoutableMessageBus::dispatch() must be inside an Envelope');
4446
}
4547

46-
/** @var BusNameStamp $busNameStamp */
48+
return$this->getMessageBus($envelope)->dispatch($envelope,$stamps);
49+
}
50+
51+
privatefunctiongetMessageBus(Envelope$envelope):MessageBusInterface
52+
{
53+
/** @var BusNameStamp|null $busNameStamp */
4754
$busNameStamp =$envelope->last(BusNameStamp::class);
48-
$busName =null !==$busNameStamp ?$busNameStamp->getBusName() : MessageBusInterface::class;
55+
56+
if (null ===$busNameStamp) {
57+
if (null ===$this->fallbackBus) {
58+
thrownewInvalidArgumentException(sprintf('Envelope is missing a BusNameStamp and no fallback message bus is configured on RoutableMessageBus.'));
59+
}
60+
61+
return$this->fallbackBus;
62+
}
63+
64+
$busName =$busNameStamp->getBusName();
4965

5066
if (!$this->busLocator->has($busName)) {
5167
thrownewInvalidArgumentException(sprintf('Bus named "%s" does not exist.',$busName));
5268
}
5369

54-
return$this->busLocator->get($busName)->dispatch($envelope,$stamps);
70+
return$this->busLocator->get($busName);
5571
}
5672
}

‎src/Symfony/Component/Messenger/Tests/RoutableMessageBusTest.php‎

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -50,41 +50,34 @@ public function testItRoutesToDefaultBus()
5050
->willReturn($envelope);
5151

5252
$container =$this->createMock(ContainerInterface::class);
53-
$container->expects($this->once())->method('has')->with(MessageBusInterface::class)
54-
->willReturn(true);
55-
$container->expects($this->once())->method('get')->with(MessageBusInterface::class)
56-
->willReturn($defaultBus);
5753

58-
$routableBus =newRoutableMessageBus($container);
54+
$routableBus =newRoutableMessageBus($container,$defaultBus);
5955

6056
$this->assertSame($envelope,$routableBus->dispatch($envelope, [$stamp]));
6157
}
6258

63-
publicfunctiontestItExceptionOnDefaultBusNotFound()
59+
publicfunctiontestItExceptionOnBusNotFound()
6460
{
6561
$this->expectException(InvalidArgumentException::class);
66-
$this->expectExceptionMessage(sprintf('Bus named "%s" does not exist.', MessageBusInterface::class));
62+
$this->expectExceptionMessage('Bus named "my_cool_bus" does not exist.');
6763

68-
$envelope =newEnvelope(new \stdClass());
64+
$envelope =newEnvelope(new \stdClass(), [
65+
newBusNameStamp('my_cool_bus')
66+
]);
6967

7068
$container =$this->createMock(ContainerInterface::class);
71-
$container->expects($this->once())->method('has')->with(MessageBusInterface::class)
72-
->willReturn(false);
73-
7469
$routableBus =newRoutableMessageBus($container);
7570
$routableBus->dispatch($envelope);
7671
}
7772

78-
publicfunctiontestItExceptionOnBusNotFound()
73+
publicfunctiontestItExceptionOnDefaultBusNotFound()
7974
{
8075
$this->expectException(InvalidArgumentException::class);
81-
$this->expectExceptionMessage(sprintf('Bus named "%s" does not exist.','foo_bus'));
76+
$this->expectExceptionMessage('Envelope is missing a BusNameStamp and no fallback message bus is configured on RoutableMessageBus.');
8277

83-
$envelope =newEnvelope(new \stdClass(), [newBusNameStamp('foo_bus')]);
78+
$envelope =newEnvelope(new \stdClass());
8479

8580
$container =$this->createMock(ContainerInterface::class);
86-
$container->expects($this->once())->method('has')->willReturn(false);
87-
8881
$routableBus =newRoutableMessageBus($container);
8982
$routableBus->dispatch($envelope);
9083
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp