ProcessAITranslateJob.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace App\Jobs;
  3. use App\Services\AiTranslateService;
  4. use App\Services\RabbitMQService;
  5. use Illuminate\Support\Facades\Log;
  6. use App\Exceptions\TaskFailException;
  7. class ProcessAITranslateJob extends BaseRabbitMQJob
  8. {
  9. private $aiService;
  10. protected function processMessage(array $messageData)
  11. {
  12. $startTime = microtime(true);
  13. try {
  14. // Laravel会自动注入
  15. $this->aiService = app(AiTranslateService::class);
  16. return $this->aiService->processTranslate($this->messageId, $messageData);
  17. } catch (TaskFailException $e) {
  18. throw $e;
  19. } catch (\Exception $e) {
  20. // 记录失败指标
  21. throw $e;
  22. } finally {
  23. // 记录处理时间
  24. $processingTime = microtime(true) - $startTime;
  25. Log::info('翻译处理耗时', ['time' => $processingTime]);
  26. }
  27. }
  28. protected function handleFinalFailure(array $messageData, \Exception $exception)
  29. {
  30. parent::handleFinalFailure($messageData, $exception);
  31. // 消息处理最终失败,准备发送到死信队列
  32. $this->aiService->handleFailedTranslate($this->messageId, $messageData, $exception);
  33. }
  34. public function stop()
  35. {
  36. parent::stop();
  37. $this->aiService->stop();
  38. }
  39. public static function publish(string $taskId, $aiAssistantId)
  40. {
  41. $data = AiTranslateService::makeByTask($taskId, $aiAssistantId);
  42. $mq = app(RabbitMQService::class);
  43. $queue = 'ai_translate_v2';
  44. $mq->publishMessage($queue, $data);
  45. return count($data['payload']);
  46. }
  47. }