Heim > Backend-Entwicklung > PHP-Tutorial > php的amqp应该怎样使用?

php的amqp应该怎样使用?

WBOY
Freigeben: 2016-06-06 20:32:14
Original
1436 Leute haben es durchsucht

我安装了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>
Nach dem Login kopieren
Nach dem Login kopieren

这是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>
Nach dem Login kopieren
Nach dem Login kopieren

使用浏览器先访问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>
Nach dem Login kopieren
Nach dem Login kopieren

这是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>
Nach dem Login kopieren
Nach dem Login kopieren

使用浏览器先访问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

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage