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

Skip to content

Commit c486305

Browse files
SanderHagenfabpot
authored andcommitted
[Messenger] reset connection on worker shutdown
1 parent 5762970 commit c486305

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
3030
use Symfony\Component\Messenger\Worker;
3131
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
32+
use Symfony\Contracts\Service\ResetInterface;
3233

3334
/**
3435
* @group time-sensitive
@@ -85,6 +86,19 @@ public function testHandlingErrorCausesReject()
8586
$this->assertSame(0, $receiver->getAcknowledgeCount());
8687
}
8788

89+
public function testWorkerResetsConnectionIfReceiverIsResettable()
90+
{
91+
$resettableReceiver = new ResettableDummyReceiver([]);
92+
93+
$bus = $this->createMock(MessageBusInterface::class);
94+
$dispatcher = new EventDispatcher();
95+
96+
$worker = new Worker([$resettableReceiver], $bus, $dispatcher);
97+
$worker->stop();
98+
$worker->run();
99+
$this->assertTrue($resettableReceiver->hasBeenReset());
100+
}
101+
88102
public function testWorkerDoesNotSendNullMessagesToTheBus()
89103
{
90104
$receiver = new DummyReceiver([
@@ -283,3 +297,18 @@ public function getRejectCount(): int
283297
return $this->rejectCount;
284298
}
285299
}
300+
301+
class ResettableDummyReceiver extends DummyReceiver implements ResetInterface
302+
{
303+
private $hasBeenReset = false;
304+
305+
public function reset()
306+
{
307+
$this->hasBeenReset = true;
308+
}
309+
310+
public function hasBeenReset(): bool
311+
{
312+
return $this->hasBeenReset;
313+
}
314+
}

src/Symfony/Component/Messenger/Worker.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use Symfony\Component\Messenger\Stamp\ReceivedStamp;
2626
use Symfony\Component\Messenger\Transport\Receiver\ReceiverInterface;
2727
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
28+
use Symfony\Contracts\Service\ResetInterface;
2829

2930
/**
3031
* @author Samuel Roze <[email protected]>
@@ -102,6 +103,7 @@ public function run(array $options = []): void
102103
}
103104

104105
$this->dispatchEvent(new WorkerStoppedEvent($this));
106+
$this->resetReceiverConnections();
105107
}
106108

107109
private function handleMessage(Envelope $envelope, ReceiverInterface $receiver, string $transportName): void
@@ -155,6 +157,15 @@ public function stop(): void
155157
$this->shouldStop = true;
156158
}
157159

160+
private function resetReceiverConnections(): void
161+
{
162+
foreach ($this->receivers as $transportName => $receiver) {
163+
if ($receiver instanceof ResetInterface) {
164+
$receiver->reset();
165+
}
166+
}
167+
}
168+
158169
private function dispatchEvent($event)
159170
{
160171
if (null === $this->eventDispatcher) {

0 commit comments

Comments
 (0)