2017-07-05 31 views
4

我使用vladimir-yuldashev/laravel-queue-rabbitmq庫流明項目中使用RabbitMQ的隊列「PhpAmqpLib \異常\ AMQPRuntimeException通道連接被關閉」錯誤與流明隊列。

隊列功能工作正常,但我看到下面噸的錯誤在我的日誌文件。

lumen.ERROR: PhpAmqpLib\Exception\AMQPRuntimeException: Channel connection is closed. in /var/www/html/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Channel/AbstractChannel.php:227

從錯誤堆棧跟蹤看來,隊列名稱看起來是「NULL」。下面是從queue.php

'rabbitmq' => [ 
     'driver' => 'rabbitmq', 

     'host' => env('RABBITMQ_HOST', 'rabbitmq'), 
     'port' => env('RABBITMQ_PORT', 5672), 

     'vhost' => env('RABBITMQ_VHOST', '/'), 
     'login' => env('RABBITMQ_LOGIN', 'guest'), 
     'password' => env('RABBITMQ_PASSWORD', 'guest'), 

     'queue' => env('RABBITMQ_QUEUE'), 
     // name of the default queue, 

     'exchange_declare' => env('RABBITMQ_EXCHANGE_DECLARE', true), 
     // create the exchange if not exists 
     'queue_declare_bind' => env('RABBITMQ_QUEUE_DECLARE_BIND', true), 
     // create the queue if not exists and bind to the exchange 

     'queue_params' => [ 
      'passive'  => env('RABBITMQ_QUEUE_PASSIVE', false), 
      'durable'  => env('RABBITMQ_QUEUE_DURABLE', true), 
      'exclusive' => env('RABBITMQ_QUEUE_EXCLUSIVE', false), 
      'auto_delete' => env('RABBITMQ_QUEUE_AUTODELETE', false), 
     ], 
     'exchange_params' => [ 
      'name' => env('RABBITMQ_EXCHANGE_NAME', null), 
      'type' => env('RABBITMQ_EXCHANGE_TYPE', 'direct'), 
      // more info at http://www.rabbitmq.com/tutorials/amqp-concepts.html 
      'passive' => env('RABBITMQ_EXCHANGE_PASSIVE', false), 
      'durable' => env('RABBITMQ_EXCHANGE_DURABLE', true), 
      // the exchange will survive server restarts 
      'auto_delete' => env('RABBITMQ_EXCHANGE_AUTODELETE', false), 
     ], 

     'sleep_on_error' => env('RABBITMQ_ERROR_SLEEP', 5), // the number of seconds to sleep if there's an error communicating with rabbitmq 

    ] 

我不使用默認隊列RabbitMQ的我的連接配置。相反,我的每個事件監聽器爲自己聲明一個隊列。這裏是我如何使用隊列命令來啓動worker和listeners。

工人

php artisan queue:work rabbitmq 

聽衆

php artisan queue:listen --queue=my-queue-1 --timeout=0 
php artisan queue:listen --queue=my-queue-2 --timeout=0 
php artisan queue:listen --queue=my-queue-3 --timeout=0 

每個這些隊列功能工作正常。

我的問題是:

  1. 是否確定要啓動多個監聽器只是一個工人?
  2. 爲什麼我的日誌中充滿了這些錯誤?我該如何解決這個問題?

還要說明一點:不知道,如果它很重要,我的事件鏈。即我正在從事件1聽衆發射事件2等等。

回答

0

好的,我終於在這一個突破。顯然,這個錯誤是因爲該命令php artisan queue:work rabbitmq的情況發生,因爲我是不及格的--queue選項,我沒有在我的.env文件默認隊列聲明。

this question on SO,我的這些隊列命令的工作的理解不正確。

正如上面的url中提到的,我完全刪除了queue:listen並使用了多個queue:work命令,將隊列名傳遞給每個工作命令。因此,修改後,這是我的命令看起來怎麼樣:

php artisan queue:work --queue=my-queue-1 --timeout=0 
php artisan queue:work --queue=my-queue-2 --timeout=0 
php artisan queue:work --queue=my-queue-3 --timeout=0