Skip to content

Commit 82f1879

Browse files
committed
test: 测试定时任务
1 parent d5992c4 commit 82f1879

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
/**
3+
* 创建定时任务类--毫秒级定时任务
4+
* 基于 Swoole 的毫秒定时器,封装的定时任务,取代 Linux 的 Crontab
5+
*
6+
* User: lisgroup
7+
* Date: 19-4-15
8+
* Time: 上午9:46
9+
*/
10+
11+
namespace App\Jobs\Timer;
12+
13+
use App\Tasks\TestTask;
14+
use Swoole\Coroutine;
15+
use Hhxsv5\LaravelS\Swoole\Task\Task;
16+
use Hhxsv5\LaravelS\Swoole\Timer\CronJob;
17+
18+
class TestCronJob extends CronJob
19+
{
20+
protected $i = 0;
21+
// !!! 定时任务的`interval`和`isImmediate`有两种配置方式(二选一):一是重载对应的方法,二是注册定时任务时传入参数。
22+
// --- 重载对应的方法来返回配置:开始
23+
public function interval()
24+
{
25+
return 10000;// 每1秒运行一次
26+
}
27+
28+
public function isImmediate()
29+
{
30+
return false;// 是否立即执行第一次,false则等待间隔时间后执行第一次
31+
}
32+
33+
// --- 重载对应的方法来返回配置:结束
34+
public function run()
35+
{
36+
\Log::info(__METHOD__, ['start', $this->i, microtime(true)]);
37+
// do something
38+
// sleep(1); // Swoole < 2.1
39+
go(function() {
40+
Coroutine::sleep(1); // Swoole>=2.1 run()方法已自动创建了协程。
41+
$this->i++;
42+
\Log::info(__METHOD__, ['end', $this->i, microtime(true)]);
43+
44+
if ($this->i >= 10) { // 运行10次后不再执行
45+
\Log::info(__METHOD__, ['stop', $this->i, microtime(true)]);
46+
$this->stop(); // 终止此任务
47+
// CronJob中也可以投递Task,但不支持Task的finish()回调。
48+
// 注意:
49+
// 1.参数2需传true
50+
// 2.config/laravels.php中修改配置task_ipc_mode为1或2,参考 https://wiki.swoole.com/wiki/page/296.html
51+
$ret = Task::deliver(new TestTask('task data'), true);
52+
var_dump($ret);
53+
}
54+
});
55+
// throw new \Exception('an exception');// 此时抛出的异常上层会忽略,并记录到Swoole日志,需要开发者try/catch捕获处理
56+
}
57+
}

laravel/config/laravels.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
'processes' => [
3030
],
3131
'timer' => [
32-
'enable' => false, // 开启定时任务类
32+
'enable' => true, // 开启定时任务类
3333
'jobs' => [
3434
// 启用LaravelScheduleJob来执行`php artisan schedule:run`,每分钟一次,替代Linux Crontab
3535
// \Hhxsv5\LaravelS\Illuminate\LaravelScheduleJob::class,

0 commit comments

Comments
 (0)