Home > Article > Backend Development > php的amqp应该怎样使用?
我安装了rabbitmq和php的amqp扩展,但是不知道怎么使用,我在网上搜了教程,但是不是太懂,
这是send.php文件,
<code>$conf=[ 'host'=>'localhost', 'port'=>'5672', 'login'=>'guest', 'password'=>'guest', 'vhost'=>'/' ]; $connect=new \AMQPConnection($conf); if(!$connect->connect()){ die('connetc error'); } $message = "TEST MESSAGE! 测试消息!"; $channel=new AMQPChannel($connect); $exchange=new AMQPExchange($channel); $exchange->setName('zblExchange'); $queue = new AMQPQueue($channel); $queue->setName('zblQueue'); for($i=0; $ipublish($message, 'zblQueue')."\n"; } //$channel->commitTransaction(); //提交事务 $connect->disconnect(); </code>
这是receive.php文件
<code>$conf=[ 'host'=>'localhost', 'port'=>'5672', 'login'=>'guest', 'password'=>'guest', 'vhost'=>'/' ]; $connect=new AMQPConnection($conf); if(!$connect->connect()){ die('connetc error'); } $channel=new AMQPChannel($connect); $exchange=new AMQPExchange($channel); $exchange->setName('zblExchange'); $exchange->setType(AMQP_EX_TYPE_DIRECT); //echo "Exchange Status:".$exchange->declare()."\n"; $queue = new AMQPQueue($channel); $queue->setName('zblQueue'); $queue->setFlags(AMQP_DURABLE); //持久化 echo "Message Total:".$queue->declare()."\n"; echo 'Queue Bind: '.$queue->bind('zblExchange', 'zblQueue')."\n"; echo "Message:\n"; //while(True){ $queue->consume('processMessage'); //echo'hello'; //$q->consume('processMessage', AMQP_AUTOACK); //自动ACK应答 //} $connect->disconnect(); function processMessage($envelope, $queue) { $msg = $envelope->getBody(); echo $msg."\n"; //处理消息 $queue->ack($envelope->getDeliveryTag()); //手动发送ACK应答 } </code>
使用浏览器先访问send.php没什么问题,再访问receive.php是504 gateway timeout,使用命令行访问send.php的时候出现致命错误AMQPConnection类找不到,我不知道是怎么回事,使用php -m的时候找不到安装的amqp扩展,但是使用phpinfo通过浏览器访问的时候显示的是amqp是加载的,使用环境是centos 7,nginx 1.6.3,php 5.6.9,请问我这里到底是哪里出了问题?
我安装了rabbitmq和php的amqp扩展,但是不知道怎么使用,我在网上搜了教程,但是不是太懂,
这是send.php文件,
<code>$conf=[ 'host'=>'localhost', 'port'=>'5672', 'login'=>'guest', 'password'=>'guest', 'vhost'=>'/' ]; $connect=new \AMQPConnection($conf); if(!$connect->connect()){ die('connetc error'); } $message = "TEST MESSAGE! 测试消息!"; $channel=new AMQPChannel($connect); $exchange=new AMQPExchange($channel); $exchange->setName('zblExchange'); $queue = new AMQPQueue($channel); $queue->setName('zblQueue'); for($i=0; $ipublish($message, 'zblQueue')."\n"; } //$channel->commitTransaction(); //提交事务 $connect->disconnect(); </code>
这是receive.php文件
<code>$conf=[ 'host'=>'localhost', 'port'=>'5672', 'login'=>'guest', 'password'=>'guest', 'vhost'=>'/' ]; $connect=new AMQPConnection($conf); if(!$connect->connect()){ die('connetc error'); } $channel=new AMQPChannel($connect); $exchange=new AMQPExchange($channel); $exchange->setName('zblExchange'); $exchange->setType(AMQP_EX_TYPE_DIRECT); //echo "Exchange Status:".$exchange->declare()."\n"; $queue = new AMQPQueue($channel); $queue->setName('zblQueue'); $queue->setFlags(AMQP_DURABLE); //持久化 echo "Message Total:".$queue->declare()."\n"; echo 'Queue Bind: '.$queue->bind('zblExchange', 'zblQueue')."\n"; echo "Message:\n"; //while(True){ $queue->consume('processMessage'); //echo'hello'; //$q->consume('processMessage', AMQP_AUTOACK); //自动ACK应答 //} $connect->disconnect(); function processMessage($envelope, $queue) { $msg = $envelope->getBody(); echo $msg."\n"; //处理消息 $queue->ack($envelope->getDeliveryTag()); //手动发送ACK应答 } </code>
使用浏览器先访问send.php没什么问题,再访问receive.php是504 gateway timeout,使用命令行访问send.php的时候出现致命错误AMQPConnection类找不到,我不知道是怎么回事,使用php -m的时候找不到安装的amqp扩展,但是使用phpinfo通过浏览器访问的时候显示的是amqp是加载的,使用环境是centos 7,nginx 1.6.3,php 5.6.9,请问我这里到底是哪里出了问题?
使用php -m的时候找不到安装的amqp扩展,但是使用phpinfo通过浏览器访问的时候显示的
这是因为amqp的扩展只在fpm中加载了, 而cli脚本方式中没有加载, 配置一下就好了, 至于504, 我觉得很可能是你fpm没有配置好
请参考: http://segmentfault.com/a/1190000002963223