PHP Laravel NGINX Symfony Dubbo Bootstrap Python Symfony Apache Protobuf linux Spring Django ASP Thrift Slim Typescript Docker Homestead MySQL Redis Git SVN ssh Root vim java scala sass less PHP Avro android html Golang Vue Angular React NGINX kotlin Rust 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']));

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