rabbitmq 要点

消息被Exchange接受以后,如果没有匹配的Queue,则会被丢弃--->>故 无论生产者还是消费者都应该在发送消息前试图创建队列

生产者想要发送消息,首先必须要声明一个Exchange和该Exchange对应的Binding(可以通过 ExchangeDeclare和BindingDeclare完成)

<?php
/*
 * exchange	: 	e1
 * channel	:	c1
 * queue		:	q1
 * routingkey:	r1 
 */
//////////////////////////生产者 推送消息////////////////////////////////////
$routingkey = 'r1';
// 设置连接
$conn_args = array ('host' => 'localhost','port' => '5672','login' => 'guest','password' => 'guest');
$conn = new AMQPConnection ( $conn_args );
if ($conn->connect ()) {
	echo "已经建立链接 <br />";
} else {
	echo "链接失败 <br />";
}

// 创建channel
$channel = new AMQPChannel ( $conn );
// 创建exchange
$ex = new AMQPExchange ( $channel );
$ex->setName ( 'e1' ); // 创建名字
$ex->setType ( AMQP_EX_TYPE_DIRECT );
$ex->setFlags ( AMQP_DURABLE );
// $ex->setFlags(AMQP_AUTODELETE);
// echo "exchange status:".$ex->declare();
echo "交换机状态:" . $ex->declareExchange ();
echo "<br />";


// exchange 与 queue绑定
$channel = new AMQPChannel($conn);
$q = new AMQPQueue($channel);
$q->setName('q1');
$q->setFlags(AMQP_DURABLE);
$q->declare();
echo '绑定队列:',$q->bind('e1',$routingkey);


// 发送消息
for($i = 0; $i < 10; $i ++) {
	// 发送数据
	$message = json_encode ([time()] );
	echo '设置:'.$ex->publish ( $message, $routingkey ),'<br />';
	sleep(1);
}


//////////////////////////消费者 获取消息////////////////////////////////////
$bindingkey='r1';
//连接RabbitMQ
$conn_args = array( 'host'=>'127.0.0.1' , 'port'=> '5672', 'login'=>'guest' , 'password'=> 'guest','vhost' =>'/');
$conn = new AMQPConnection($conn_args);
$conn->connect();
//设置queue名称,使用exchange,绑定routingkey
$channel = new AMQPChannel($conn);
$q = new AMQPQueue($channel);
$q->setName('q1');
$q->setFlags(AMQP_DURABLE);
echo '队列长度:',$q->declare(),'<br />';
//消息获取
echo '<pre>';
for($i=0;$i<5;$i++){
	$messages = $q->get(AMQP_AUTOACK) ;
	var_dump(json_decode($messages->getBody(), true ));
}
$conn->disconnect();

  

posted @ 2015-07-20 16:06  宁默然  阅读(121)  评论(0)    收藏  举报