php的rabbitmq队列持久化设置,这个功能是一个十分伟大的功能,我们在ecshop注册发短信的时候,或者程序要发邮件的时候,往往会拖跨网络速度,在高并发的时候,这个时候我们将数据写到队列中,通过后断消费者去处理,能大大提高网络运行效率。以下是php针对rabbitmq队列的持久化处理。
$conn_args = array( 'host' => '172.17.0.2', 'port' => '5672', 'login' => 'admin', //默认的用户名和密码 'password' => '123456', 'vhost'=>'/' ); $e_name = 'business'; //交换机名 $q_name = 'business_worker'; //队列名 $k_route = 'systemCode'; //路由key //创建连接和channel $conn = new \AMQPConnection($conn_args); if (!$conn->connect()) { die("Cannot connect to the broker!\n"); } $channel = new \AMQPChannel($conn); //消息内容 $message = "TEST MESSAGE! 测试消息!"; //创建交换机 $ex = new \AMQPExchange($channel); $ex->setName($e_name); $ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型 ,精准投递,根据交换机publish的路由信息队列绑定时才会进行 $ex->setFlags(AMQP_DURABLE); //持久化 ,支持rabbitMq重启时交换机自动恢复 echo "Exchange Status:".$ex->declareExchange()."\n"; //查看如果交换机不存在则进行创建 //创建队列 $q = new \AMQPQueue($channel); $q->setName($q_name); $q->setFlags(AMQP_DURABLE); //队列持久化 echo "Message Total:".$q->declareQueue()."\n"; //同样,如果不存在则创建 $q->bind($e_name,$q_name); //发送消息 //$channel->startTransaction(); //开始事务 for($i=0; $i<5; ++$i){ //如果需要进行消息持久化机制的话,则进行如下设置 //$ex->publish($message,$k_route,AMQP_NOPARAM,array());,如果delivery是1的话,则表明是非持久化,持久化的时候注意使用AUTOASK。则处理完的消息可以自动删除 //不需要的话则进行这样:$ex->publish($message, $k_route,AMQP_NOPARAM,array('delivery_mode'=>2, 'priority'=> 9)); echo "Send Message:". $ex->publish($i.'==='.$message,$q_name,AMQP_NOPARAM, array('delivery_mode'=>2, 'priority'=> 9))."<br>"; } //$channel->commitTransaction(); //提交事务 $conn->disconnect();