1、生产者:publisher.php
<?php
date_default_timezone_set("Asia/Shanghai");
//配置信息
$conn_args = array(
'host' => '127.0.0.1',
'port' => '5672',
'login' => 'why',
'password' => 'why',
'vhost'=>'/'
);
$ex_name = 'test_exchange'; //交换机
$route = 'test_route'; //路由
//创建连接和channel
$conn = new AMQPConnection($conn_args);
if (!$conn->connect()) {
die("Cannot connect to the broker!\n");
}
$channel = new AMQPChannel($conn);//通道
//创建交换机对象
$exchange = new AMQPExchange($channel);
$exchange->setName($ex_name);
//发送消息
//$channel->startTransaction(); //开始事务
$message = 'test success';
echo date("Y-m-d h:i:s",time()) . "Send Message(item):" . $exchange->publish($message, $route)."\n";
//$channel->commitTransaction(); //提交事务
$conn->disconnect();
?>
2、消费者:consumer.php
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
//配置信息
$conn_args = array(
'host' => '127.0.0.1',
'port' => '5672',
'login' => 'why',
'password' => 'why',
'vhost'=>'/'
);
$ex_name = 'test_exchange'; //交换机名
$queen_name = 'test_queen'; //队列名
$route = 'test_route'; //路由
//连接
$conn = new AMQPConnection($conn_args);
if (!$conn->connect()) {
die("Cannot connect to the broker!\n");
}
//创建channel
$channel = new AMQPChannel($conn);
//创建exchange
$exchange = new AMQPExchange($channel);
$exchange->setName($ex_name);
$exchange->setType('direct');
$exchange->declare();
//通过某个channel创建队列
$queen = new AMQPQueue($channel);
$queen->setName($queen_name);
$queen->setFlags(AMQP_DURABLE); //持久化
echo "Message Total:" . $queen->declare()."\n";
//通过路由绑定交换机与队列
echo 'Queue Bind(all): '.$queen->bind($ex_name, $route)."\n";
//阻塞模式接收消息
echo "Message:\n";
while(True){
$queen->consume('allMessage');
//$q->consume('processMessage', AMQP_AUTOACK); //自动ACK应答
}
$conn->disconnect();
/**
* 消费回调函数
* 处理消息
*/
function allMessage($envelope, $queue) {
$msg = $envelope->getBody();
echo $msg."\n"; //处理消息
$queue->ack($envelope->getDeliveryTag()); //处理成功后手动发送ACK应答,若不发送则可以只读不消费。
}
?>