rabbitmq AMQP 死信队列研究

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

首先

猜你喜欢

转载自my.oschina.net/osgrace/blog/1814310