Home > Backend Development > PHP Tutorial > php的amqp应该怎样使用?

php的amqp应该怎样使用?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-06 20:32:14
Original
1548 people have browsed it

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

这是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>
Copy after login
Copy after login

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

这是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>
Copy after login
Copy after login

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

Related labels:
php
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Issues
php data acquisition?
From 1970-01-01 08:00:00
0
0
0
PHP extension intl
From 1970-01-01 08:00:00
0
0
0
How to learn php well
From 1970-01-01 08:00:00
0
0
0
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template