php_worker 수정
This commit is contained in:
@@ -14,19 +14,35 @@ class NaverWorker extends BaseCommand
|
|||||||
public function run(array $params)
|
public function run(array $params)
|
||||||
{
|
{
|
||||||
$redis = new \Redis();
|
$redis = new \Redis();
|
||||||
|
try {
|
||||||
$redis->connect('redis', 6379);
|
$redis->connect('redis', 6379);
|
||||||
$redis->select(10);
|
$redis->select(9);
|
||||||
|
CLI::write(CLI::color('🟢 Naver Worker running...', 'green'));
|
||||||
CLI::write('🟢 Naver Worker running...');
|
} catch (\Exception $e) {
|
||||||
|
CLI::error("Redis 연결 불가: " . $e->getMessage());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
// Redis에서 데이터가 들어올 때까지 대기 (Blocking Pop)
|
try {
|
||||||
// 'naver:raw_queue'는 api_receiver.php에서 lPush한 이름과 같아야 함
|
// 'brPop'은 [큐이름, 데이터] 형태의 배열을 반환합니다.
|
||||||
$result = $redis->brPop(['naver:raw_queue'], 30);
|
$result = $redis->brPop(['naver:raw_queue'], 30);
|
||||||
|
|
||||||
|
$result = $redis->brPop(['naver:raw_queue'], 30);
|
||||||
if ($result) {
|
if ($result) {
|
||||||
|
try {
|
||||||
$payload = json_decode($result[1], true);
|
$payload = json_decode($result[1], true);
|
||||||
$this->processTask($payload);
|
$this->processTask($payload); // 실제 DB 저장 등
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
// 처리 실패 시 다시 큐에 넣어서 나중에 재시도하게 함
|
||||||
|
$redis->lPush('naver:raw_queue', $result[1]);
|
||||||
|
CLI::error("처리 실패로 데이터를 큐에 다시 넣었습니다.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
CLI::error("Worker Loop Error: " . $e->getMessage());
|
||||||
|
// 루프가 너무 빨리 돌며 에러를 뿜는 것을 방지
|
||||||
|
sleep(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -35,6 +51,6 @@ class NaverWorker extends BaseCommand
|
|||||||
{
|
{
|
||||||
// 여기서 DB 모델(ConfirmModel)을 불러와 저장하고
|
// 여기서 DB 모델(ConfirmModel)을 불러와 저장하고
|
||||||
// CURL을 사용하여 네이버 API를 호출하는 로직을 작성합니다.
|
// CURL을 사용하여 네이버 API를 호출하는 로직을 작성합니다.
|
||||||
CLI::write("Processing data received at: " . $payload['received_at']);
|
CLI::write("Processing: " . ($payload['request_data']['articleNumber'] ?? 'Unknown'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -88,5 +88,5 @@ class Autoload extends AutoloadConfig
|
|||||||
*
|
*
|
||||||
* @var list<string>
|
* @var list<string>
|
||||||
*/
|
*/
|
||||||
public $helpers = ['url'];
|
public $helpers = ['log','url'];
|
||||||
}
|
}
|
||||||
|
|||||||
23
app/Helpers/log_helper.php
Normal file
23
app/Helpers/log_helper.php
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if (! function_exists('write_custom_log')) {
|
||||||
|
/**
|
||||||
|
* 전용 로그 기록 함수 (Worker, API 리시버 등 어디서나 사용 가능)
|
||||||
|
*/
|
||||||
|
function write_custom_log($message, $level = 'INFO', $type = 'service')
|
||||||
|
{
|
||||||
|
$logDir = WRITEPATH . 'logs/worker';
|
||||||
|
if (!is_dir($logDir)) {
|
||||||
|
@mkdir($logDir, 0777, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
$suffix = ($type === 'failed') ? '_failed' : '';
|
||||||
|
$logFile = $logDir . '/' . date('Y-m-d') . $suffix . '.log';
|
||||||
|
|
||||||
|
$timestamp = date('Y-m-d H:i:s');
|
||||||
|
$singleLine = str_replace(["\r", "\n", "\t"], " ", $message);
|
||||||
|
$formatted = "[$timestamp] [$level] $singleLine" . PHP_EOL;
|
||||||
|
|
||||||
|
@file_put_contents($logFile, $formatted, FILE_APPEND);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user