php的rabbitmq队列持久化设置

php的rabbitmq队列持久化设置,这个功能是一个十分伟大的功能,我们在ecshop注册发短信的时候,或者程序要发邮件的时候,往往会拖跨网络速度,在高并发的时候,这个时候我们将数据写到队列中,通过后断消费者去处理,能大大提高网络运行效率。以下是php针对rabbitmq队列的持久化处理。
php

    <?php
     $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();
打赏 支付宝打赏 微信打赏

未经允许不得转载!

评论列表 0

访客
取消