rabbitmq 版本
RabbitMQ 3.6.10, Erlang 20.0.1
死信队列研究
php delayed_message.php
报错1
PHP Fatal error: Uncaught PhpAmqpLib\Exception\AMQPProtocolConnectionException: COMMAND_INVALID - unknown exchange type 'x-delayed-message' in /var/www/html/rabbitmq/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AbstractConnection.php:689 Stack trace: #0 [internal function]: PhpAmqpLib\Connection\AbstractConnection->connection_close(Object(PhpAmqpLib\Wire\AMQPReader)) #1 /var/www/html/rabbitmq/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Channel/AbstractChannel.php(207): call_user_func(Array, Object(PhpAmqpLib\Wire\AMQPReader)) #2 /var/www/html/rabbitmq/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Channel/AbstractChannel.php(348): PhpAmqpLib\Channel\AbstractChannel->dispatch('10,50', '\x01\xF7;COMMAND_INVA...', NULL) #3 /var/www/html/rabbitmq/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AbstractConnection.php(614): PhpAmqpLib\Channel\AbstractChannel->wait() #4 /var/www/html/rabbitmq/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Channel/AbstractChannel.php(225): PhpAmqpLib\Connection\AbstractConnection->wait_channel(1, 0) in /var/www/html/rabbitmq/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AbstractConnection.php on line 689
原因是死信队列插件未安装
安装办法
命令行
sudo rabbitmq-plugins enable rabbitmq_delayed_message_exchange
提示:
Error: The following plugins could not be found:
rabbitmq_delayed_message_exchange
报插件不存在
命令查看已有插件
sudo rabbitmq-plugins list
*号是已开启,同时发现未开启的插件中也没有deady的插件,需要自己手动去官方下载
地址
https://www.rabbitmq.com/community-plugins.html
找到插件,发现只支持3.6以上版本,本地环境刚好合适
然后下载3.6的插件,解压出来文件
rabbitmq_delayed_message_exchange-20171215-3.6.x.ez
之后文件手动放到rabbitmq-server的插件目录下即可
插件目录地址为:
/usr/lib/rabbitmq/lib/rabbitmq_server-3.6.10/plugins
放入文件之后
再次开启插件
sudo rabbitmq-plugins enable rabbitmq_delayed_message_exchange
成功安装,报错消失.....
报错如下2.
PHP Fatal error: Uncaught PhpAmqpLib\Exception\AMQPProtocolChannelException: PRECONDITION_FAILED - unknown delivery tag 1 in /var/www/html/rabbitmq/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Channel/AMQPChannel.php:188 Stack trace: #0 [internal function]: PhpAmqpLib\Channel\AMQPChannel->channel_close(Object(PhpAmqpLib\Wire\AMQPReader)) #1 /var/www/html/rabbitmq/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Channel/AbstractChannel.php(207): call_user_func(Array, Object(PhpAmqpLib\Wire\AMQPReader)) #2 /var/www/html/rabbitmq/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Channel/AbstractChannel.php(348): PhpAmqpLib\Channel\AbstractChannel->dispatch('20,40', '\x01\x96,PRECONDITION...', NULL) #3 /var/www/html/rabbitmq/vendor/php-amqplib/php-amqplib/demo/delayed_message.php(86): PhpAmqpLib\Channel\AbstractChannel->wait() #4 {main} thrown in /var/www/html/rabbitmq/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Channel/AMQPChannel.php on line 188
首先