• RabbitMQ学习之(五)_一个基于PHP的RabbitMQ操作类


    //amqp.php类文件
    <?php
    
    class Amqp
    {
        public $e_name;
        public $q_name;
        public $k_route;
        public $channel;
    
        public function __construct($config,$e_name,$q_name,$k_route)
        {
            $this->e_name = $e_name;
            $this->q_name = $q_name;
            $this->k_route = $k_route;
    
            //创建连接和channel 
            $this->conn = new AMQPConnection($config);    
            if (!$this->conn->connect()) {    
                return array('error_code' => 1,'msg'=>'Cannot connect to the broker!' );
            }
            $this->channel = new AMQPChannel($this->conn);
            $this->CreateExchange();
            $this->CreateQueue();
        }
    
        //创建交换机
        public function CreateExchange()
        {
            $ex = new AMQPExchange($this->channel);    
            $ex->setName($this->e_name);  
            $ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型   
            $ex->setFlags(AMQP_DURABLE | AMQP_AUTODELETE); //持久化  
            //echo "Exchange Status:".$ex->declare()."
    ";   //队列内容总数
            $ex->declare();
            $this->ex = $ex;
        }
        
        //创建队列   
        public function CreateQueue()
        {
            $q = new AMQPQueue($this->channel);  
            $q->setName($this->q_name);    
            $q->setFlags(AMQP_DURABLE | AMQP_AUTODELETE); //持久化   
            //echo "Message Total:".$this->q->declare()."
    ";  
            //绑定交换机与队列,并指定路由键  
            //echo "queue status: ".$q->declare();
            //echo "
    ";
            //echo 'Queue Bind: '.$q->bind($this->e_name, $this->k_route)."
    "; 
            //echo "
    ";
             
             $q->bind($this->e_name, $this->k_route);
        }
        
        //发送消息
        public function send($msg)
        { 
            //$this->CreateExchange();
            //$this->CreateQueue();
            $message=json_encode($msg);
            $this->channel->startTransaction();
            //echo "send: ".$this->ex->publish($message, $this->k_route); //将你的消息通过制定routingKey发送
            $status = $this->ex->publish($message, $this->k_route);
            $this->channel->commitTransaction();
            $this->conn->disconnect();
            return array('status'=>$status);
        }
        
        //获取消息
        public function get()
        {
            $q = new AMQPQueue($this->channel);  
            $q->setName($this->q_name);  
            $q->setFlags(AMQP_DURABLE | AMQP_AUTODELETE);  
            
            //$q->delete();删除队列
            $return=array();
            while($a=$q->declare())
            {
                //echo "queue status: ".$a;
                //echo "==========
    ";
    
                $messages = $q->get(AMQP_AUTOACK);
                $return[]=json_decode($messages->getBody(),true);  
                //echo "
    ";  
            }
            $this->conn->disconnect();
            return $return;
        }
    
    }
    //config.php配置文件
    return array(
        'amqp'=>array(    
                    array(    
                            'host' => '127.0.0.1',
                            'port' => '5672',
                            'vhost' => '/',
                            'user' => 'admin',
                            'password' => 'admin'
                     )
                ),
    );
    //send.php(加入队列文件|生产者)
    require_once('amqp.php');
            $e_name = 'e_guest'; //交换机名  
            $k_route = 'k_route_feedpush'; //路由key
            $q_name = 'q_guest_feedpush'; //队列名
            $config = config('amqp');
            
            $amqp = new Amqp(config('amqp'),$e_name,$q_name,$k_route);
    
      $msg = array('test','123');
    
     $re = $amqp->send($msg);
    //get.php(接收并处理文件|消费者)
    
    require_once('amqp.php');
    $config = require('config.php');
    $config_qmqp = $config['amqp'];
    
    $e_name = 'e_guest'; //交换机名  
    $k_route = 'k_route_sendemail'; //路由key 
    $q_name = 'q_guest_sendemail'; //队列名
    $amqp = new Amqp($config_qmqp,$e_name,$q_name,$k_route);
    $re = $amqp->get();
  • 相关阅读:
    wordpress建个人博客
    函数(一)
    字符串格式化
    集合运算
    基本数据类型(二)
    基本数据类型(一)
    分享一个下片神器
    Proxyee
    基本运算符
    条件语句和while循环
  • 原文地址:https://www.cnblogs.com/wt645631686/p/8251501.html
Copyright © 2020-2023  润新知