feat: 增加内置节点注册任务;优化定时器代码结构;

This commit is contained in:
augushong
2025-08-23 23:22:52 +08:00
parent 716e56b8dc
commit a9d1429000
7 changed files with 163 additions and 97 deletions

View File

@@ -4,7 +4,7 @@ declare(strict_types=1);
namespace base\common\command;
use app\common\model\VirtualModel;
use app\common\service\TimerService;
use GuzzleHttp\Client;
use GuzzleHttp\Promise\Utils;
use think\console\Command;
@@ -48,7 +48,7 @@ class TimerBase extends Command
return;
}
$host = $site_domain;
if ($input->hasOption('local')) {
@@ -58,39 +58,18 @@ class TimerBase extends Command
$output->writeln('站点域名:' . $host);
$site_host = parse_url($host, PHP_URL_HOST);
$config_list = include app_file_path('common/command/timer/config.php');
$request_list = TimerService::generateAllRequestList();
$request_list = [];
foreach ($config_list as $config_item) {
$config_item = static::initConfigItem($config_item);
if ($config_item['name'] == 'http_demo' && !env('adminsystem.is_demo', false)) {
continue;
}
$concurrency = $config_item['concurrency'];
for ($i = 0; $i < $concurrency; $i++) {
$target = $config_item['target'];
$params = [
'concurrency_id' => $i,
'concurrency_count' => $concurrency,
];
$target_info = parse_url($target);
$query_params = [];
if (isset($target_info['query'])) {
parse_str($target_info['query'], $query_params);
}
$query_params = array_merge($query_params, $params);
$target_info['query'] = http_build_query($query_params);
$target = unparse_url($target_info);
$config_item['target'] = $target;
$config_item['concurrency_id'] = $i;
$request_list[] = clone $config_item;
}
}
$system_host_register =
[
'name' => 'system_host_register', // 定时任务的名称,不能重复
'type' => 'site', // 定时任务的类型默认只支持site你也可以重写定时器命令行以支持其他命令
'target' => '/tools/timer.SystemHost/do', // 要访问的地址如果不是以https开头那么以后台的系统配置中读取相关配置如果没有配置则不执行
'frequency' => 30, // 执行频率单位填写10则每10秒过后执行一次
];
$system_host_register = TimerService::initConfigItem($system_host_register);
$system_host_request_list = TimerService::generateRequestListFromConfig($system_host_register);
$request_list = array_merge($request_list, $system_host_request_list);
$this->host = $host;
$this->siteDomain = $site_domain;
@@ -245,24 +224,4 @@ class TimerBase extends Command
sleep(1);
}
}
private static function initConfigItem($config)
{
$default = [
'name' => 'http_demo',
'type' => 'site',
'target' => '',
'frequency' => 600,
'concurrency' => 1,
];
$data = array_merge($default, $config);
if ($data['frequency'] < 0) {
$data['frequency'] = 0;
}
$model_timer = new VirtualModel($data);
return $model_timer;
}
}