Просмотр исходного кода

没有配置死信队列的就不绑定死信

visuddhinanda 9 месяцев назад
Родитель
Сommit
2b4bc2bf93
1 измененных файлов с 51 добавлено и 38 удалено
  1. 51 38
      api-v8/app/Services/RabbitMQService.php

+ 51 - 38
api-v8/app/Services/RabbitMQService.php

@@ -7,6 +7,7 @@ use PhpAmqpLib\Channel\AMQPChannel;
 use PhpAmqpLib\Message\AMQPMessage;
 use PhpAmqpLib\Wire\AMQPTable;
 use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Str;
 
 class RabbitMQService
 {
@@ -49,47 +50,59 @@ class RabbitMQService
 
 
         // 创建死信交换机
-        $this->channel->exchange_declare(
-            $queueConfig['dead_letter_exchange'],
-            'direct',
-            false,
-            true,
-            false
-        );
+        if (isset($queueConfig['dead_letter_exchange'])) {
+            $this->channel->exchange_declare(
+                $queueConfig['dead_letter_exchange'],
+                'direct',
+                false,
+                true,
+                false
+            );
 
-        $dlqName = $queueConfig['dead_letter_queue'];
-        $dlqConfig = config("mint.rabbitmq.dead_letter_queues.{$dlqName}", []);
-        $dlqArgs = [];
-        if (isset($dlqConfig['ttl'])) {
-            $dlqArgs['x-message-ttl'] =  $dlqConfig['ttl'];
-        }
-        if (isset($dlqConfig['max_length'])) {
-            $dlqArgs['x-max-length'] =  $dlqConfig['max_length'];
-        }
-        $dlqArguments = new AMQPTable($dlqArgs);
+            $dlqName = $queueConfig['dead_letter_queue'];
+            $dlqConfig = config("mint.rabbitmq.dead_letter_queues.{$dlqName}", []);
+            $dlqArgs = [];
+            if (isset($dlqConfig['ttl'])) {
+                $dlqArgs['x-message-ttl'] =  $dlqConfig['ttl'];
+            }
+            if (isset($dlqConfig['max_length'])) {
+                $dlqArgs['x-max-length'] =  $dlqConfig['max_length'];
+            }
+            $dlqArguments = new AMQPTable($dlqArgs);
+
+            // 创建死信队列
+            $this->channel->queue_declare(
+                $dlqName,
+                false,  // passive
+                true,   // durable
+                false,  // exclusive
+                false,  // auto_delete
+                false,  // nowait
+                $dlqArguments
+            );
 
-        // 创建死信队列
-        $this->channel->queue_declare(
-            $dlqName,
-            false,  // passive
-            true,   // durable
-            false,  // exclusive
-            false,  // auto_delete
-            false,  // nowait
-            $dlqArguments
-        );
+            // 绑定死信队列到死信交换机
+            $this->channel->queue_bind(
+                $queueConfig['dead_letter_queue'],
+                $queueConfig['dead_letter_exchange']
+            );
 
-        // 绑定死信队列到死信交换机
-        $this->channel->queue_bind(
-            $queueConfig['dead_letter_queue'],
-            $queueConfig['dead_letter_exchange']
-        );
+            // 创建主队列,配置死信
+            $arguments = new AMQPTable([
+                'x-dead-letter-exchange' => $queueConfig['dead_letter_exchange'],
+                'x-dead-letter-routing-key' => $queueConfig['dead_letter_queue'], // 死信路由键
+            ]);
+        } else {
+            $workerArgs = [];
+            if (isset($queueConfig['ttl'])) {
+                $workerArgs['x-message-ttl'] =  $queueConfig['ttl'];
+            }
+            if (isset($queueConfig['max_length'])) {
+                $workerArgs['x-max-length'] =  $queueConfig['max_length'];
+            }
+            $arguments = new AMQPTable($workerArgs);
+        }
 
-        // 创建主队列,配置死信
-        $arguments = new AMQPTable([
-            'x-dead-letter-exchange' => $queueConfig['dead_letter_exchange'],
-            'x-dead-letter-routing-key' => $queueConfig['dead_letter_queue'], // 死信路由键
-        ]);
 
         $this->channel->queue_declare(
             $queueName,
@@ -112,7 +125,7 @@ class RabbitMQService
                 [
                     'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT,
                     'timestamp' => time(),
-                    'message_id' => uniqid(),
+                    'message_id' => Str::uuid(),
                     "content_type" => 'application/json; charset=utf-8'
                 ]
             );