Skip to content

Commit c34b983

Browse files
committed
完善
1 parent a8b0201 commit c34b983

26 files changed

Lines changed: 463 additions & 114 deletions

‎src/Queue.php‎

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,18 @@
1212
namespace think;
1313

1414
use InvalidArgumentException;
15+
use think\cache\driver\Redis;
1516
use think\helper\Str;
1617
use think\queue\Connector;
18+
use think\queue\connector\Database;
1719

1820
/**
1921
* Class Queue
2022
* @package think\queue
2123
*
2224
* @method Connector driver($driver = null)
25+
* @mixin Database
26+
* @mixin Redis
2327
*/
2428
class Queue extends Factory
2529
{
@@ -33,7 +37,7 @@ class Queue extends Factory
3337
*/
3438
protected function getConfig($name)
3539
{
36-
return $this->app->config->get("queue.connectors.{$name}", ['driver' => 'sync']);
40+
return $this->app->config->get("queue.connections.{$name}", ['driver' => 'sync']);
3741
}
3842

3943
protected function createDriver($name)
@@ -47,18 +51,27 @@ protected function createDriver($name)
4751
$driver = $this->app->invokeClass($class, [$this->getConfig($driver)]);
4852

4953
return $driver->setApp($this->app)
50-
->setConnectorName($name);
54+
->setConnection($name);
5155
}
5256

5357
throw new InvalidArgumentException("Driver [$driver] not supported.");
5458
}
5559

60+
/**
61+
* @param null|string $name
62+
* @return Connector
63+
*/
64+
public function connection($name = null)
65+
{
66+
return $this->driver($name);
67+
}
68+
5669
/**
5770
* 默认驱动
5871
* @return string
5972
*/
6073
public function getDefaultDriver()
6174
{
62-
return $this->app->config->get('queue.default', 'sync');
75+
return $this->app->config->get('queue.default');
6376
}
6477
}

‎src/config.php‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
// +----------------------------------------------------------------------
1111

1212
return [
13-
'default' => 'sync',
14-
'connectors' => [
13+
'default' => 'sync',
14+
'connections' => [
1515
'sync' => [
1616
'driver' => 'sync',
1717
],
@@ -31,7 +31,7 @@
3131
'persistent' => false,
3232
],
3333
],
34-
'failed' => [
34+
'failed' => [
3535
'type' => 'none',
3636
'table' => 'failed_jobs',
3737
],

‎src/queue/Connector.php‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ abstract class Connector
2525
*
2626
* @var string
2727
*/
28-
protected $connectorName;
28+
protected $connection;
2929

3030
protected $options = [];
3131

@@ -143,9 +143,9 @@ public function setApp(App $app)
143143
*
144144
* @return string
145145
*/
146-
public function getConnectorName()
146+
public function getConnection()
147147
{
148-
return $this->connectorName;
148+
return $this->connection;
149149
}
150150

151151
/**
@@ -154,9 +154,9 @@ public function getConnectorName()
154154
* @param string $name
155155
* @return $this
156156
*/
157-
public function setConnectorName($name)
157+
public function setConnection($name)
158158
{
159-
$this->connectorName = $name;
159+
$this->connection = $name;
160160

161161
return $this;
162162
}

‎src/queue/Job.php‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ abstract class Job
3737
/**
3838
* The name of the connection the job belongs to.
3939
*/
40-
protected $connector;
40+
protected $connection;
4141

4242
/**
4343
* Indicates if the job has been deleted.
@@ -266,9 +266,9 @@ public function getName()
266266
*
267267
* @return string
268268
*/
269-
public function getConnector()
269+
public function getConnection()
270270
{
271-
return $this->connector;
271+
return $this->connection;
272272
}
273273

274274
/**

‎src/queue/Listener.php‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ protected function phpBinary()
5858
}
5959

6060
/**
61-
* @param string $connector
61+
* @param string $connection
6262
* @param string $queue
6363
* @param int $delay
6464
* @param int $sleep
@@ -67,17 +67,17 @@ protected function phpBinary()
6767
* @param int $timeout
6868
* @return void
6969
*/
70-
public function listen($connector, $queue, $delay = 0, $sleep = 3, $maxTries = 0, $memory = 128, $timeout = 60)
70+
public function listen($connection, $queue, $delay = 0, $sleep = 3, $maxTries = 0, $memory = 128, $timeout = 60)
7171
{
72-
$process = $this->makeProcess($connector, $queue, $delay, $sleep, $maxTries, $memory, $timeout);
72+
$process = $this->makeProcess($connection, $queue, $delay, $sleep, $maxTries, $memory, $timeout);
7373

7474
while (true) {
7575
$this->runProcess($process, $memory);
7676
}
7777
}
7878

7979
/**
80-
* @param string $connector
80+
* @param string $connection
8181
* @param string $queue
8282
* @param int $delay
8383
* @param int $sleep
@@ -86,13 +86,13 @@ public function listen($connector, $queue, $delay = 0, $sleep = 3, $maxTries = 0
8686
* @param int $timeout
8787
* @return Process
8888
*/
89-
public function makeProcess($connector, $queue, $delay, $sleep, $maxTries, $memory, $timeout)
89+
public function makeProcess($connection, $queue, $delay, $sleep, $maxTries, $memory, $timeout)
9090
{
9191
$command = array_filter([
9292
$this->phpBinary(),
9393
'think',
9494
'queue:work',
95-
$connector,
95+
$connection,
9696
'--once',
9797
"--queue={$queue}",
9898
"--delay={$delay}",

‎src/queue/Worker.php‎

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

1212
namespace think\queue;
1313

14+
use Carbon\Carbon;
1415
use Exception;
1516
use RuntimeException;
1617
use think\Cache;
@@ -22,6 +23,7 @@
2223
use think\queue\event\JobProcessed;
2324
use think\queue\event\JobProcessing;
2425
use think\queue\event\WorkerStopping;
26+
use think\queue\exception\MaxAttemptsExceededException;
2527
use Throwable;
2628

2729
class Worker
@@ -59,15 +61,15 @@ public function __construct(Queue $queue, Event $event, Handle $handle, Cache $c
5961
}
6062

6163
/**
62-
* @param string $connector
64+
* @param string $connection
6365
* @param string $queue
6466
* @param int $delay
6567
* @param int $sleep
6668
* @param int $maxTries
6769
* @param int $memory
6870
* @param int $timeout
6971
*/
70-
public function daemon($connector, $queue, $delay = 0, $sleep = 3, $maxTries = 0, $memory = 128, $timeout = 60)
72+
public function daemon($connection, $queue, $delay = 0, $sleep = 3, $maxTries = 0, $memory = 128, $timeout = 60)
7173
{
7274
if ($this->supportsAsyncSignals()) {
7375
$this->listenForSignals();
@@ -78,15 +80,15 @@ public function daemon($connector, $queue, $delay = 0, $sleep = 3, $maxTries = 0
7880
while (true) {
7981

8082
$job = $this->getNextJob(
81-
$this->queue->driver($connector), $queue
83+
$this->queue->connection($connection), $queue
8284
);
8385

8486
if ($this->supportsAsyncSignals()) {
8587
$this->registerTimeoutHandler($job, $timeout);
8688
}
8789

8890
if ($job) {
89-
$this->runJob($job, $connector, $maxTries, $delay);
91+
$this->runJob($job, $connection, $maxTries, $delay);
9092
} else {
9193
$this->sleep($sleep);
9294
}
@@ -231,39 +233,38 @@ protected function listenForSignals()
231233

232234
/**
233235
* 执行下个任务
234-
* @param string $connectorName
236+
* @param string $connection
235237
* @param string $queue
236238
* @param int $delay
237239
* @param int $sleep
238240
* @param int $maxTries
239241
* @return void
240242
* @throws Exception
241243
*/
242-
public function runNextJob($connectorName, $queue, $delay = 0, $sleep = 3, $maxTries = 0)
244+
public function runNextJob($connection, $queue, $delay = 0, $sleep = 3, $maxTries = 0)
243245
{
244246

245-
$job = $this->getNextJob($this->queue->driver($connectorName), $queue);
247+
$job = $this->getNextJob($this->queue->connection($connection), $queue);
246248

247249
if ($job) {
248-
$this->runJob($job, $connectorName, $maxTries, $delay);
249-
return;
250+
$this->runJob($job, $connection, $maxTries, $delay);
251+
} else {
252+
$this->sleep($sleep);
250253
}
251-
252-
$this->sleep($sleep);
253254
}
254255

255256
/**
256257
* 执行任务
257258
* @param Job $job
258-
* @param string $connectorName
259+
* @param string $connection
259260
* @param int $maxTries
260261
* @param int $delay
261262
* @return void
262263
*/
263-
protected function runJob($job, $connectorName, $maxTries, $delay)
264+
protected function runJob($job, $connection, $maxTries, $delay)
264265
{
265266
try {
266-
$this->process($connectorName, $job, $maxTries, $delay);
267+
$this->process($connection, $job, $maxTries, $delay);
267268
} catch (Exception | Throwable $e) {
268269
$this->handle->report($e);
269270
}
@@ -291,32 +292,32 @@ protected function getNextJob($connector, $queue)
291292

292293
/**
293294
* Process a given job from the queue.
294-
* @param string $connector
295+
* @param string $connection
295296
* @param Job $job
296297
* @param int $maxTries
297298
* @param int $delay
298299
* @return void
299300
* @throws Exception
300301
*/
301-
public function process($connector, $job, $maxTries = 0, $delay = 0)
302+
public function process($connection, $job, $maxTries = 0, $delay = 0)
302303
{
303304
try {
304-
$this->event->trigger(new JobProcessing($connector, $job));
305+
$this->event->trigger(new JobProcessing($connection, $job));
305306

306307
$this->markJobAsFailedIfAlreadyExceedsMaxAttempts(
307-
$connector, $job, (int) $maxTries
308+
$connection, $job, (int) $maxTries
308309
);
309310

310311
$job->fire();
311312

312-
$this->event->trigger(new JobProcessed($connector, $job));
313+
$this->event->trigger(new JobProcessed($connection, $job));
313314
} catch (Exception | Throwable $e) {
314315
try {
315316
if (!$job->hasFailed()) {
316-
$this->markJobAsFailedIfWillExceedMaxAttempts($connector, $job, (int) $maxTries, $e);
317+
$this->markJobAsFailedIfWillExceedMaxAttempts($connection, $job, (int) $maxTries, $e);
317318
}
318319

319-
$this->event->trigger(new JobExceptionOccurred($connector, $job, $e));
320+
$this->event->trigger(new JobExceptionOccurred($connection, $job, $e));
320321
} finally {
321322
if (!$job->isDeleted() && !$job->isReleased() && !$job->hasFailed()) {
322323
$job->release($delay);
@@ -328,56 +329,56 @@ public function process($connector, $job, $maxTries = 0, $delay = 0)
328329
}
329330

330331
/**
331-
* @param string $connector
332+
* @param string $connection
332333
* @param Job $job
333334
* @param int $maxTries
334335
*/
335-
protected function markJobAsFailedIfAlreadyExceedsMaxAttempts($connector, $job, $maxTries)
336+
protected function markJobAsFailedIfAlreadyExceedsMaxAttempts($connection, $job, $maxTries)
336337
{
337338
$maxTries = !is_null($job->maxTries()) ? $job->maxTries() : $maxTries;
338339

339340
$timeoutAt = $job->timeoutAt();
340341

341-
if ($timeoutAt && time() <= $timeoutAt) {
342+
if ($timeoutAt && Carbon::now()->getTimestamp() <= $timeoutAt) {
342343
return;
343344
}
344345

345346
if (!$timeoutAt && (0 === $maxTries || $job->attempts() <= $maxTries)) {
346347
return;
347348
}
348349

349-
$this->failJob($connector, $job, $e = new RuntimeException(
350+
$this->failJob($connection, $job, $e = new MaxAttemptsExceededException(
350351
$job->getName() . ' has been attempted too many times or run too long. The job may have previously timed out.'
351352
));
352353

353354
throw $e;
354355
}
355356

356357
/**
357-
* @param string $connector
358+
* @param string $connection
358359
* @param Job $job
359360
* @param int $maxTries
360361
* @param Exception $e
361362
*/
362-
protected function markJobAsFailedIfWillExceedMaxAttempts($connector, $job, $maxTries, $e)
363+
protected function markJobAsFailedIfWillExceedMaxAttempts($connection, $job, $maxTries, $e)
363364
{
364365
$maxTries = !is_null($job->maxTries()) ? $job->maxTries() : $maxTries;
365366

366-
if ($job->timeoutAt() && $job->timeoutAt() <= time()) {
367-
$this->failJob($connector, $job, $e);
367+
if ($job->timeoutAt() && $job->timeoutAt() <= Carbon::now()->getTimestamp()) {
368+
$this->failJob($connection, $job, $e);
368369
}
369370

370371
if ($maxTries > 0 && $job->attempts() >= $maxTries) {
371-
$this->failJob($connector, $job, $e);
372+
$this->failJob($connection, $job, $e);
372373
}
373374
}
374375

375376
/**
376-
* @param string $connector
377+
* @param string $connection
377378
* @param Job $job
378379
* @param Exception $e
379380
*/
380-
protected function failJob($connector, $job, $e)
381+
protected function failJob($connection, $job, $e)
381382
{
382383
$job->markAsFailed();
383384

@@ -391,7 +392,7 @@ protected function failJob($connector, $job, $e)
391392
$job->failed($e);
392393
} finally {
393394
$this->event->trigger(new JobFailed(
394-
$connector, $job, $e ?: new RuntimeException('ManuallyFailed')
395+
$connection, $job, $e ?: new RuntimeException('ManuallyFailed')
395396
));
396397
}
397398
}

0 commit comments

Comments
 (0)