Skip to content

Commit 59a09ff

Browse files
committed
Allow configuration in queue_consumer.xml to be higher than default
1 parent a6933f3 commit 59a09ff

File tree

2 files changed

+47
-5
lines changed

2 files changed

+47
-5
lines changed

app/code/Magento/MessageQueue/Model/Cron/ConsumersRunner.php

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,7 @@ public function run(): void
139139
];
140140

141141
if ($maxMessages) {
142-
$arguments[] =
143-
'--max-messages=' . min($consumer->getMaxMessages() ?? $maxMessages, $maxMessages);
142+
$arguments = $this->addMaxMessagesArgument($arguments, $consumer, $maxMessages);
144143
}
145144

146145
$command = $php . ' ' . BP . '/bin/magento queue:consumers:start %s %s'
@@ -155,7 +154,7 @@ public function run(): void
155154
];
156155

157156
if ($maxMessages) {
158-
$arguments[] = '--max-messages=' . min($consumer->getMaxMessages() ?? $maxMessages, $maxMessages);
157+
$arguments = $this->addMaxMessagesArgument($arguments, $consumer, $maxMessages);
159158
}
160159

161160
$command = $php . ' ' . BP . '/bin/magento queue:consumers:start %s %s'
@@ -166,6 +165,38 @@ public function run(): void
166165
}
167166
}
168167

168+
/**
169+
* Add max-messages argument and log warning if exceeds default
170+
*
171+
* @param array $arguments Arguments array to append to
172+
* @param ConsumerConfigItemInterface $consumer
173+
* @param int $defaultMaxMessages
174+
* @return array
175+
*/
176+
private function addMaxMessagesArgument(
177+
array $arguments,
178+
ConsumerConfigItemInterface $consumer,
179+
int $defaultMaxMessages
180+
): array {
181+
$consumerMaxMessages =$consumer->getMaxMessages() ?? $defaultMaxMessages;
182+
183+
if ($consumerMaxMessages > $defaultMaxMessages) {
184+
$this->logger->warning(
185+
__(
186+
'Consumer "%1" has max-messages=%2 which exceeds the configured default (%3). '
187+
. 'This may probably cause high memory usage or long processing times.',
188+
$consumer->getName(),
189+
$consumerMaxMessages,
190+
$defaultMaxMessages
191+
)
192+
);
193+
}
194+
195+
$arguments[] = '--max-messages=' . $consumerMaxMessages;
196+
197+
return $arguments;
198+
}
199+
169200
/**
170201
* Checks that the consumer can be run
171202
*

app/code/Magento/MessageQueue/Test/Unit/Model/Cron/ConsumersRunnerTest.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ public function testRunDisabled()
124124

125125
/**
126126
* @param int $maxMessages
127+
* @param int $maxMessagesConsumer
127128
* @param bool $isLocked
128129
* @param string $php
129130
* @param string $command
@@ -135,6 +136,7 @@ public function testRunDisabled()
135136
*/
136137
public function testRun(
137138
$maxMessages,
139+
$maxMessagesConsumer,
138140
$isLocked,
139141
$php,
140142
$command,
@@ -161,6 +163,7 @@ public function testRun(
161163
$consumer = $this->getMockBuilder(ConsumerConfigItemInterface::class)
162164
->getMockForAbstractClass();
163165
$consumer->method('getName')->willReturn($consumerName);
166+
$consumer->method('getMaxMessages')->willReturn($maxMessagesConsumer);
164167

165168
$this->phpExecutableFinderMock->expects($this->once())
166169
->method('find')
@@ -190,6 +193,7 @@ public static function runDataProvider()
190193
return [
191194
[
192195
'maxMessages' => 20000,
196+
'maxMessagesConsumer' => 20000,
193197
'isLocked' => false,
194198
'php' => '',
195199
'command' => 'php ' . BP . '/bin/magento queue:consumers:start %s %s %s',
@@ -200,16 +204,18 @@ public static function runDataProvider()
200204
],
201205
[
202206
'maxMessages' => 10000,
207+
'maxMessagesConsumer' => 30000,
203208
'isLocked' => false,
204209
'php' => '',
205210
'command' => 'php ' . BP . '/bin/magento queue:consumers:start %s %s %s',
206-
'arguments' => ['consumerName', '--single-thread', '--max-messages=10000'],
211+
'arguments' => ['consumerName', '--single-thread', '--max-messages=30000'],
207212
'allowedConsumers' => [],
208213
'shellBackgroundExpects' => 1,
209214
'isRunExpects' => 1,
210215
],
211216
[
212217
'maxMessages' => 10000,
218+
'maxMessagesConsumer' => 10000,
213219
'isLocked' => false,
214220
'php' => '',
215221
'command' => 'php ' . BP . '/bin/magento queue:consumers:start %s %s %s',
@@ -220,6 +226,7 @@ public static function runDataProvider()
220226
],
221227
[
222228
'maxMessages' => 10000,
229+
'maxMessagesConsumer' => 10000,
223230
'isLocked' => true,
224231
'php' => '',
225232
'command' => 'php ' . BP . '/bin/magento queue:consumers:start %s %s %s',
@@ -230,6 +237,7 @@ public static function runDataProvider()
230237
],
231238
[
232239
'maxMessages' => 10000,
240+
'maxMessagesConsumer' => 10000,
233241
'isLocked' => true,
234242
'php' => '',
235243
'command' => 'php ' . BP . '/bin/magento queue:consumers:start %s %s %s',
@@ -240,6 +248,7 @@ public static function runDataProvider()
240248
],
241249
[
242250
'maxMessages' => 10000,
251+
'maxMessagesConsumer' => 10000,
243252
'isLocked' => true,
244253
'php' => '',
245254
'command' => 'php ' . BP . '/bin/magento queue:consumers:start %s %s %s',
@@ -250,16 +259,18 @@ public static function runDataProvider()
250259
],
251260
[
252261
'maxMessages' => 10000,
262+
'maxMessagesConsumer' => 500,
253263
'isLocked' => false,
254264
'php' => '',
255265
'command' => 'php ' . BP . '/bin/magento queue:consumers:start %s %s %s',
256-
'arguments' => ['consumerName', '--single-thread', '--max-messages=10000'],
266+
'arguments' => ['consumerName', '--single-thread', '--max-messages=500'],
257267
'allowedConsumers' => ['consumerName'],
258268
'shellBackgroundExpects' => 1,
259269
'isRunExpects' => 1,
260270
],
261271
[
262272
'maxMessages' => 0,
273+
'maxMessagesConsumer' => 0,
263274
'isLocked' => false,
264275
'php' => '/bin/php',
265276
'command' => '/bin/php ' . BP . '/bin/magento queue:consumers:start %s %s',

0 commit comments

Comments
 (0)