rabbitmq 安装及基础介绍请参考:http://www.cnblogs.com/diegodu/p/4971586.html
direct类型:
provider 端代码
//设置你的连接
$conn_args = array('host' => 'localhost', 'port' => '5672', 'login' => 'guest', 'password' => 'guest','vhost' =>'/');
$conn = new AMQPConnection($conn_args);
if (!$conn->connect()) {
echo "连接建立失败";
exit;
}
$channel = new AMQPChannel($conn);
$e_name = 'e_exchange'; //交换机名
$key = 'key_one'; //路由key
//创建交换机
$ex = new AMQPExchange($channel);
$ex->setName($e_name);//设置交换机名称
$ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型
$ex->setFlags(AMQP_DURABLE); //持久化
$ex->declareExchange(); //声明交换机
echo $ex->publish('hello world',$key)."\n";
}
consumer 端代码
$key='key_one';
//连接RabbitMQ
$conn_args = array( 'host'=>'127.0.0.1' , 'port'=> '5672', 'login'=>'guest' , 'password'=> 'guest','vhost' =>'/');
$conn = new AMQPConnection($conn_args);
$conn->connect();
$channel = new AMQPChannel($conn);
$q = new AMQPQueue($channel);
$q->setName('queue'); //设置队列名称
$q->setFlags(AMQP_DURABLE); //持久化设置
$q->declareQueue();//声明队列
$q->bind('e_exchange',$key); //绑定交换机
while(True){
$q->consume('consumer'); //回调方法为consumer
}
$conn->disconnect();
function consumer($envelope, $queue) {
$msg = $envelope->getBody();
echo $msg."\n"; //处理消息
$queue->ack($envelope->getDeliveryTag()); //手动发送ACK应答
}
fanout 模式
provider
/设置你的连接
$conn_args = array('host' => 'localhost', 'port' => '5672', 'login' => 'guest', 'password' => 'guest','vhost' =>'/');
$conn = new AMQPConnection($conn_args);
if (!$conn->connect()) {
echo "连接建立失败";
exit;
}
$channel = new AMQPChannel($conn);
$e_name = 'ex_fanout'; //交换机名
//创建交换机
$ex = new AMQPExchange($channel);
$ex->setName($e_name);//设置交换机名称
$ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型
$ex->setFlags(AMQP_DURABLE); //持久化
$ex->declareExchange(); //声明交换机
echo $ex->publish('hello world')."\n";
consumer
//连接RabbitMQ
$conn_args = array( 'host'=>'127.0.0.1' , 'port'=> '5672', 'login'=>'guest' , 'password'=> 'guest','vhost' =>'/');
$conn = new AMQPConnection($conn_args);
$conn->connect();
$channel = new AMQPChannel($conn);
$q = new AMQPQueue($channel);
$q->setName('queue_one'); //设置队列名称
$q->setFlags(AMQP_DURABLE); //持久化设置
$q->declareQueue();//声明队列
$q->bind('ex_fanout'); //绑定交换机
while(True){
$q->consume('consumer'); //回调方法为consumer
}
$conn->disconnect();
function consumer($envelope, $queue) {
$msg = $envelope->getBody();
echo $msg."\n"; //处理消息
$queue->ack($envelope->getDeliveryTag()); //手动发送ACK应答
}