Skip to content

Commit 08ebb0f

Browse files
Use array for rate limiters instead of ContainerInterface
1 parent 31a9ae8 commit 08ebb0f

File tree

3 files changed

+12
-10
lines changed

3 files changed

+12
-10
lines changed

src/Symfony/Component/Messenger/Command/ConsumeMessagesCommand.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ protected function interact(InputInterface $input, OutputInterface $output)
158158
protected function execute(InputInterface $input, OutputInterface $output): int
159159
{
160160
$receivers = [];
161+
$rateLimiters = [];
161162
foreach ($receiverNames = $input->getArgument('receivers') as $receiverName) {
162163
if (!$this->receiverLocator->has($receiverName)) {
163164
$message = sprintf('The receiver "%s" does not exist.', $receiverName);
@@ -169,6 +170,9 @@ protected function execute(InputInterface $input, OutputInterface $output): int
169170
}
170171

171172
$receivers[$receiverName] = $this->receiverLocator->get($receiverName);
173+
if ($this->rateLimiterLocator->has($receiverName)) {
174+
$rateLimiters[$receiverName] = $this->rateLimiterLocator->get($receiverName);
175+
}
172176
}
173177

174178
if (null !== $this->resetServicesListener && !$input->getOption('no-reset')) {
@@ -215,7 +219,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
215219

216220
$bus = $input->getOption('bus') ? $this->routableBus->getMessageBus($input->getOption('bus')) : $this->routableBus;
217221

218-
$worker = new Worker($receivers, $bus, $this->eventDispatcher, $this->logger, $this->rateLimiterLocator);
222+
$worker = new Worker($receivers, $bus, $this->eventDispatcher, $this->logger, $rateLimiters);
219223
$options = [
220224
'sleep' => $input->getOption('sleep') * 1000000,
221225
];

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -457,9 +457,8 @@ public function testWorkerRateLimitMessages()
457457
'limit' => 1,
458458
'interval' => '1 minute',
459459
], new InMemoryStorage());
460-
$rateLimiterLocator = new ServiceLocator(['bus' => fn () => $rateLimitFactory]);
461460

462-
$worker = new Worker(['bus' => $receiver], $bus, $eventDispatcher, null, $rateLimiterLocator);
461+
$worker = new Worker(['bus' => $receiver], $bus, $eventDispatcher, null, ['bus' => $rateLimitFactory]);
463462
$worker->run();
464463

465464
$this->assertCount(2, $receiver->getAcknowledgedEnvelopes());

src/Symfony/Component/Messenger/Worker.php

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

1212
namespace Symfony\Component\Messenger;
1313

14-
use Psr\Container\ContainerInterface;
1514
use Psr\Log\LoggerInterface;
1615
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
1716
use Symfony\Component\Messenger\Event\WorkerMessageHandledEvent;
@@ -49,12 +48,12 @@ class Worker
4948
private WorkerMetadata $metadata;
5049
private array $acks = [];
5150
private \SplObjectStorage $unacks;
52-
private ?ContainerInterface $rateLimiterLocator;
51+
private ?array $rateLimiters;
5352

5453
/**
5554
* @param ReceiverInterface[] $receivers Where the key is the transport name
5655
*/
57-
public function __construct(array $receivers, MessageBusInterface $bus, EventDispatcherInterface $eventDispatcher = null, LoggerInterface $logger = null, ContainerInterface $rateLimiterLocator = null)
56+
public function __construct(array $receivers, MessageBusInterface $bus, EventDispatcherInterface $eventDispatcher = null, LoggerInterface $logger = null, array $rateLimiters = null)
5857
{
5958
$this->receivers = $receivers;
6059
$this->bus = $bus;
@@ -64,7 +63,7 @@ public function __construct(array $receivers, MessageBusInterface $bus, EventDis
6463
'transportNames' => array_keys($receivers),
6564
]);
6665
$this->unacks = new \SplObjectStorage();
67-
$this->rateLimiterLocator = $rateLimiterLocator;
66+
$this->rateLimiters = $rateLimiters;
6867
}
6968

7069
/**
@@ -225,16 +224,16 @@ private function ack(): bool
225224

226225
private function rateLimit(string $transportName): void
227226
{
228-
if (!$this->rateLimiterLocator) {
227+
if (!$this->rateLimiters) {
229228
return;
230229
}
231230

232-
if (!$this->rateLimiterLocator->has($transportName)) {
231+
if (!array_key_exists($transportName, $this->rateLimiters)) {
233232
return;
234233
}
235234

236235
/** @var LimiterInterface $rateLimiter */
237-
$rateLimiter = $this->rateLimiterLocator->get($transportName)->create();
236+
$rateLimiter = $this->rateLimiters[$transportName]->create();
238237
if ($rateLimiter->consume()->isAccepted()) {
239238
return;
240239
}

0 commit comments

Comments
 (0)