Skip to content

Commit 18ac987

Browse files
committed
Allow config overwrite on vendor tasks.
1 parent ce69d1f commit 18ac987

File tree

3 files changed

+40
-5
lines changed

3 files changed

+40
-5
lines changed

config/app.example.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,13 @@
7272

7373
// ignores task classes
7474
'ignoredTasks' => [],
75+
76+
// per-task configuration overrides (timeout, retries, rate, costs, unique)
77+
// 'tasks' => [
78+
// 'Queue.ProgressExample' => [
79+
// 'timeout' => 300,
80+
// ],
81+
// ],
7582
],
7683
'Icon' => [
7784
'sets' => [

docs/sections/configuration.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,3 +162,27 @@ Make sure you set the timeout high enough so that it could never run longer than
162162
It is recommended setting it to at least 2x the maximum possible execution length. See [Concurrent workers](limitations.md)
163163

164164
Set the retries to at least 1, otherwise it will never execute again after failure in the first run.
165+
166+
### Configure-based task overrides
167+
168+
You can also override task properties via Configure, which is useful for:
169+
- Third-party tasks you cannot modify
170+
- Environment-specific settings (dev vs production)
171+
- Centralized configuration management
172+
173+
```php
174+
$config['Queue']['tasks'] = [
175+
'Queue.ProgressExample' => [
176+
'timeout' => 300, // Override the task's timeout
177+
'retries' => 5, // Override the task's retries
178+
],
179+
'MyPlugin.HeavyTask' => [
180+
'timeout' => 600,
181+
'rate' => 10,
182+
'costs' => 50,
183+
'unique' => true,
184+
],
185+
];
186+
```
187+
188+
The priority order is: Configure override > Task class property > Global default.

src/Queue/Config.php

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -129,14 +129,18 @@ public static function ignoredTasks(): array {
129129
public static function taskConfig(array $tasks): array {
130130
$config = [];
131131
$defaultTimeout = static::defaultworkertimeout();
132+
$taskOverrides = Configure::read('Queue.tasks', []);
132133

133134
foreach ($tasks as $task => $className) {
134135
[$pluginName, $taskName] = pluginSplit($task);
135136

136137
/** @var \Queue\Queue\Task $taskObject */
137138
$taskObject = new $className();
138139

139-
$taskTimeout = $taskObject->timeout ?? $defaultTimeout;
140+
// Get task-specific config overrides from Configure
141+
$taskConfig = $taskOverrides[$task] ?? [];
142+
143+
$taskTimeout = $taskConfig['timeout'] ?? $taskObject->timeout ?? $defaultTimeout;
140144

141145
// Warn if task timeout is greater than the requeue timeout, which can cause premature requeuing
142146
if ($taskTimeout > $defaultTimeout) {
@@ -159,10 +163,10 @@ public static function taskConfig(array $tasks): array {
159163
$config[$task]['name'] = $taskName;
160164
$config[$task]['plugin'] = $pluginName;
161165
$config[$task]['timeout'] = $taskTimeout;
162-
$config[$task]['retries'] = $taskObject->retries ?? static::defaultworkerretries();
163-
$config[$task]['rate'] = $taskObject->rate;
164-
$config[$task]['costs'] = $taskObject->costs;
165-
$config[$task]['unique'] = $taskObject->unique;
166+
$config[$task]['retries'] = $taskConfig['retries'] ?? $taskObject->retries ?? static::defaultworkerretries();
167+
$config[$task]['rate'] = $taskConfig['rate'] ?? $taskObject->rate;
168+
$config[$task]['costs'] = $taskConfig['costs'] ?? $taskObject->costs;
169+
$config[$task]['unique'] = $taskConfig['unique'] ?? $taskObject->unique;
166170

167171
unset($taskObject);
168172
}

0 commit comments

Comments
 (0)