ProcessAITranslateJob.php 1.7 KB

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