gpt4 book ai didi

laravel - "PhpAmqpLib\Exception\AMQPRuntimeException: Channel connection is closed"Lumen队列错误

转载 作者:行者123 更新时间:2023-12-02 14:08:23 29 4
gpt4 key购买 nike

我正在使用vladimir-yuldashev/laravel-queue-rabbitmq在 Lumen 项目中使用 RabbitMq 队列的库。

队列功能工作正常,但我在日志文件中看到大量以下错误。

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

从错误堆栈跟踪来看,队列名称似乎被视为“NULL”。这是我的rabbitmq连接配置来自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

]

我没有使用默认队列。相反,我的每个事件监听器都为自己声明一个队列。以下是我如何使用队列命令来启动工作程序和监听器。

worker

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,依此类推。

最佳答案

好吧,我终于在这方面取得突破了。显然,错误是由于此命令 php artisanqueue:workrabbitmq 发生的,因为我没有传递 --queue 选项,并且没有声明默认队列在我的 .env 文件中。

根据 this question on SO ,我对这些队列命令如何工作的理解是不正确的。

正如上面的网址中提到的,我已经完全删除了 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

关于laravel - "PhpAmqpLib\Exception\AMQPRuntimeException: Channel connection is closed"Lumen队列错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44934477/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com