PHP Laravel NGINX html css Bootstrap Python Symfony Apache Windows linux jquery Django ASP vanilla Slim vagrant docker Homestead MySQL Redis Git SVN ssh Root vim PhpStorm Pycharm sass less PHP Laravel android html css Vue Angular React NGINX html css Javascript

PhpAmqpLib\Exception\AMQPOutOfRangeException: AMQP-rabbit doesn't define data of type [] 错误的解决办法

原创

原创不易 ~ 转载请注明出处哦

最近在做RabbitMQPriority Queue的时候遇到了以下错误:

PhpAmqpLib\Exception\AMQPOutOfRangeException: AMQP-rabbit doesn't define data of type []

具体是在queue_declare的时候,直接使用数组传入作为arguments的时候出现的。

一开始浅查了一下源码,没发现用数组存在什么问题,后来发现在AMQPWriter.php中的write_table方法中第一行为

$typeIsSym = !($d instanceof AMQPTable); //purely for back-compat purposes

这就很坑了,毕竟前面的方法里写的很模糊。所以解决办法也很简单,可以参考以下github issue地址

https://github.com/php-amqplib/php-amqplib/issues/405#issuecomment-305787065

即不要使用

$channel->exchange_declare('test_exchange', 'direct', false, false, true, false, false, ['foo' => 'bar']);

这样的形式传递arguments, 而需要用以下的方式:

$channel->exchange_declare('test_exchange', 'direct', false, false, true, false, false, new AMQPTable(['foo' => 'bar']));

正在加载验证码......
请先完成验证