Skip to content

Commit f28f988

Browse files
authored
优化代码 (#667)
* 修复 Cron 在某些场景抛出异常 * 优化 Db::select() 默认使用从库 * 格式化代码
1 parent f8dff84 commit f28f988

File tree

3 files changed

+51
-45
lines changed

3 files changed

+51
-45
lines changed

src/Components/swoole/src/Cron/Scheduler.php

+49-42
Original file line numberDiff line numberDiff line change
@@ -49,49 +49,56 @@ public function __construct()
4949
*/
5050
public function run(ITaskParam $param)
5151
{
52-
/** @var \Imi\Cron\CronTask $task */
53-
$task = $param->getData();
54-
/** @var \Imi\Cron\CronManager $cronManager */
55-
$cronManager = App::getBean('CronManager');
56-
switch ($type = $task->getType())
52+
try
5753
{
58-
case CronTaskType::RANDOM_WORKER:
59-
$swooleServer = ServerManager::getServer('main', ISwooleServer::class)->getSwooleServer();
60-
$taskClass = $task->getTask();
61-
$swooleServer->sendMessage(json_encode([
62-
'action' => 'cronTask',
63-
'id' => $task->getId(),
64-
'data' => $task->getData(),
65-
'task' => \is_callable($taskClass) ? null : $taskClass,
66-
'type' => $type,
67-
], \JSON_THROW_ON_ERROR | \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE), random_int(0, $swooleServer->setting['worker_num'] - 1));
68-
break;
69-
case CronTaskType::ALL_WORKER:
70-
$swooleServer = ServerManager::getServer('main', ISwooleServer::class)->getSwooleServer();
71-
$taskClass = $task->getTask();
72-
$message = json_encode([
73-
'action' => 'cronTask',
74-
'id' => $task->getId(),
75-
'data' => $task->getData(),
76-
'task' => \is_callable($taskClass) ? null : $taskClass,
77-
'type' => $type,
78-
], \JSON_THROW_ON_ERROR | \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE);
79-
for ($i = 0; $i < $swooleServer->setting['worker_num']; ++$i)
80-
{
81-
$swooleServer->sendMessage($message, $i);
82-
}
83-
break;
84-
case CronTaskType::TASK:
85-
$cronManager->getTaskCallable($task->getId(), $task->getTask(), $type)($task->getId(), $task->getData());
86-
break;
87-
case CronTaskType::PROCESS:
88-
$cronManager->getTaskCallable($task->getTask(), $task->getTask(), $type)($task->getId(), $task->getData());
89-
break;
90-
case CronTaskType::CRON_PROCESS:
91-
/** @var \Imi\Cron\CronWorker $cronWorker */
92-
$cronWorker = App::getBean('CronWorker');
93-
$cronWorker->exec($task->getId(), $task->getData(), $task->getTask(), $type);
94-
break;
54+
/** @var \Imi\Cron\CronTask $task */
55+
$task = $param->getData();
56+
/** @var \Imi\Cron\CronManager $cronManager */
57+
$cronManager = App::getBean('CronManager');
58+
switch ($type = $task->getType())
59+
{
60+
case CronTaskType::RANDOM_WORKER:
61+
$swooleServer = ServerManager::getServer('main', ISwooleServer::class)->getSwooleServer();
62+
$taskClass = $task->getTask();
63+
$swooleServer->sendMessage(json_encode([
64+
'action' => 'cronTask',
65+
'id' => $task->getId(),
66+
'data' => $task->getData(),
67+
'task' => \is_callable($taskClass) ? null : $taskClass,
68+
'type' => $type,
69+
], \JSON_THROW_ON_ERROR | \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE), random_int(0, $swooleServer->setting['worker_num'] - 1));
70+
break;
71+
case CronTaskType::ALL_WORKER:
72+
$swooleServer = ServerManager::getServer('main', ISwooleServer::class)->getSwooleServer();
73+
$taskClass = $task->getTask();
74+
$message = json_encode([
75+
'action' => 'cronTask',
76+
'id' => $task->getId(),
77+
'data' => $task->getData(),
78+
'task' => \is_callable($taskClass) ? null : $taskClass,
79+
'type' => $type,
80+
], \JSON_THROW_ON_ERROR | \JSON_UNESCAPED_SLASHES | \JSON_UNESCAPED_UNICODE);
81+
for ($i = 0; $i < $swooleServer->setting['worker_num']; ++$i)
82+
{
83+
$swooleServer->sendMessage($message, $i);
84+
}
85+
break;
86+
case CronTaskType::TASK:
87+
$cronManager->getTaskCallable($task->getId(), $task->getTask(), $type)($task->getId(), $task->getData());
88+
break;
89+
case CronTaskType::PROCESS:
90+
$cronManager->getTaskCallable($task->getTask(), $task->getTask(), $type)($task->getId(), $task->getData());
91+
break;
92+
case CronTaskType::CRON_PROCESS:
93+
/** @var \Imi\Cron\CronWorker $cronWorker */
94+
$cronWorker = App::getBean('CronWorker');
95+
$cronWorker->exec($task->getId(), $task->getData(), $task->getTask(), $type);
96+
break;
97+
}
98+
}
99+
catch (\Throwable $th)
100+
{
101+
Log::error($th);
95102
}
96103
}
97104
}

src/Db/Db.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,7 @@ public static function exec(string $sql, array $bindValues = [], ?string $poolNa
333333
/**
334334
* 执行 SQL 返回结果.
335335
*/
336-
public static function select(string $sql, array $bindValues = [], ?string $poolName = null, int $queryType = QueryType::WRITE): ?IResult
336+
public static function select(string $sql, array $bindValues = [], ?string $poolName = null, int $queryType = QueryType::READ): ?IResult
337337
{
338338
$db = self::getInstance($poolName, $queryType);
339339
if ($bindValues)

src/Model/Model.php

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
use Imi\Db\Db;
1010
use Imi\Db\Query\Interfaces\IQuery;
1111
use Imi\Db\Query\Interfaces\IResult;
12-
use Imi\Db\Query\QueryType;
1312
use Imi\Db\Query\Raw;
1413
use Imi\Db\Query\Result;
1514
use Imi\Event\Event;
@@ -227,7 +226,7 @@ public static function exists(...$ids): bool
227226
}
228227
}
229228

230-
return (bool) Db::select('select exists(' . $query->buildSelectSql() . ')', $query->getBinds(), static::__getMeta(static::__getRealClassName())->getDbPoolName(), QueryType::READ)->getScalar();
229+
return (bool) Db::select('select exists(' . $query->buildSelectSql() . ')', $query->getBinds(), static::__getMeta(static::__getRealClassName())->getDbPoolName())->getScalar();
231230
}
232231

233232
/**

0 commit comments

Comments
 (0)