ProcessAITranslateJob.php 1.8 KB

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