Sfoglia il codice sorgente

中断后重做从断点开始

visuddhinanda 10 mesi fa
parent
commit
7c448c3335
1 ha cambiato i file con 16 aggiunte e 5 eliminazioni
  1. 16 5
      api-v8/app/Console/Commands/MqAiTranslate.php

+ 16 - 5
api-v8/app/Console/Commands/MqAiTranslate.php

@@ -7,6 +7,7 @@ use App\Http\Api\Mq;
 use Illuminate\Support\Facades\Log;
 use Illuminate\Support\Facades\Http;
 use Illuminate\Http\Client\RequestException;
+use App\Tools\RedisClusters;
 
 class MqAiTranslate extends Command
 {
@@ -48,15 +49,25 @@ class MqAiTranslate extends Command
         $queue = 'ai_translate';
         $this->info(" [*] Waiting for {$queue}. To exit press CTRL+C");
         Log::debug("mq worker {$queue} start.");
-        Mq::worker($exchange, $queue, function ($messages) use ($queue) {
+        Mq::worker($exchange, $queue, function ($messages, $messageId) use ($queue) {
             Log::debug('ai translate start', ['message' => count($messages)]);
             $this->info('ai translate task start task=' . count($messages));
             if (!is_array($messages) || count($messages) === 0) {
                 Log::error('message is not array');
                 return 1;
             }
+
             //获取model token
             $first = $messages[0];
+            $taskId = $first->task->info->id;
+            RedisClusters::put("/task/{$taskId}/message_id", $messageId);
+            $pointerKey = "/message/{$messageId}/pointer";
+            $pointer = 0;
+            if (RedisClusters::has($pointerKey)) {
+                //回到上次中断的点
+                $pointer = RedisClusters::get($pointerKey);
+            }
+
             Log::debug($queue . ' ai assistant token', ['user' => $first->model->uid]);
             $modelToken = $first->model->token;
             Log::debug($queue . ' ai assistant token', ['token' => $modelToken]);
@@ -82,11 +93,10 @@ class MqAiTranslate extends Command
                 }
             }
 
-
-            foreach ($messages as $key => $message) {
+            for ($i = $pointer; $i < count($messages); $i++) {
+                RedisClusters::put($pointerKey, $i);
+                $message = $messages[$i];
                 $taskDiscussionContent = [];
-
-
                 $param = [
                     "model" => $message->model->model,
                     "messages" => [
@@ -314,6 +324,7 @@ class MqAiTranslate extends Command
                     $this->setTaskStatus($message->task->info->id, 'done', $modelToken);
                 }
             }
+            RedisClusters::forget($pointerKey);
             $this->info('ai translate task complete');
             return 0;
         });