> 백엔드 개발 > PHP 튜토리얼 > php的amqp应该怎样使用?

php的amqp应该怎样使用?

WBOY
풀어 주다: 2016-06-06 20:32:14
원래의
1436명이 탐색했습니다.

我安装了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

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿