当前位置: 首页 > 知识库问答 >
问题:

"PhpAmqpLib\Excema\AMQPRuntimeExcema:通道连接已关闭"使用流明队列出错

裴哲
2023-03-14

我正在使用vladmir yuldashev/laravel队列Rabbitmq库在Lumen项目中使用RabbitMq队列。

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

流明。错误:PhpAmqpLib\异常\AMQPRuntime异常:通道连接关闭.在 /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

    ]

我没有使用默认队列。相反,我的每个事件侦听器都为自己声明一个队列。下面是我如何使用队列命令来启动辅助角色和侦听器。

工人

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. 对于多个侦听器,可以只启动一个worker吗

还有一个注意事项:不确定是否重要,我的事件是连锁的。也就是说,我正在从事件1听众中触发事件2,依此类推。

共有1个答案

姜乐家
2023-03-14

好吧,我终于有了突破。显然,错误发生是因为这个命令php工匠队列:工作Rabbitmq,因为我没有传递--query选项,我没有在我的. env文件中声明默认队列。

根据SO上的这个问题,我对这些队列命令如何工作的理解是不正确的。

如上所述,我已经完全删除了队列:监听,并使用了多个队列:work命令,将队列名称传递给每个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
 类似资料:
  • 我使用weblogic应用服务器和oracle数据库。我使用jdbc与oracle数据库通信。我从weblogic数据源获得连接,并向表中插入一条记录。问题是,当我想关闭连接(插入数据库后)时,我会遇到一个异常(连接已经关闭)。这是我的代码: 但是联系。close语句引发异常: 我试图避免连接。close语句(因为我教过连接是自动关闭的!!但过了一段时间,所有的连接都打开了,因此引发了一个异常)

  • 我所尝试的 我尝试将我的域添加到以下部分https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-http-settings-tls-sans.html#k8s-elasticsearch-http-service-san 我曾尝试使用openssl生成自签名证书,但没有成功。尝试本地连接将返回以下错误消息。 curl-u“弹性:$passw

  • 运行CRON JOB时,得到一个异常,说连接已经关闭。应用程序正在dropwizard上运行,以下是数据库配置 请帮助解决问题。

  • 每个人 都。我正在编写一个函数,该函数使用类 httpURL 连接连接到服务器。在代码中,我建立了一个连接,按顺序调用了获取输出流()和获取输入流()方法。然后我断开连接。在此之后,我尝试获取通过 getInputStream() 方法获得的数据,但编译器提醒 NullPointer 异常。 代码如下: 在调试尝试之后,当我将断开连接行移到finally模块的最后一行时,一切都会好起来。但我感到困

  • 我用JSch制作了一个SSH客户端。客户端与我的Apache Mina SSH服务器正常工作。但当我用真正的设备测试它时,它失败了。 这是客户端的代码: 代码此时失败: 连接到主机时出错:127.0.0.1,端口:22 com。jcraft。jsch。JSCHEException:com上的会话已关闭 。jcraft。jsch。一场openChannel(Session.java:861) 我的问

  • 我使用AWS DocumentDB作为我在node中开发的应用程序中的数据库。与MongoDB兼容的js。我已经使用MongoClient连接到我的数据库。我的应用程序会执行,但每次执行时会连接大约1000 DB的数据,然后会出现错误: 我尝试使用关闭连接,然后它给出连接池已关闭。我相信这个问题是由于太多的数据库连接造成的。 如何释放MongoDB中的连接?感谢任何帮助。