PHP Amqp 封装类

  1 <?php
  2 
  3 /**
  4  *  使用示例
  5 #定义名称
  6 define('ExchangeName', 'exchange_name_15');
  7 define('QueueName',    'queue_name_15');
  8 define('RoutingKey',   'routing_key_15');
  9 
 10 if(count($argv) > 1){
 11 
 12     $amqp = new Amqp();
 13     $amqp->channel();
 14     $amqp->exchange(ExchangeName, AMQP_EX_TYPE_DIRECT, AMQP_DURABLE)->declareExchange();
 15     $amqp->queue(QueueName, AMQP_DURABLE)->declareQueue();
 16     $amqp->bindQueue(RoutingKey);
 17     $amqp->publish($argv[1], RoutingKey);
 18     $amqp->disconnect();
 19 
 20 }else{
 21 
 22     $amqp = new Amqp();
 23     $amqp->channel();
 24     $amqp->exchange(ExchangeName, AMQP_EX_TYPE_DIRECT, AMQP_DURABLE)->declareExchange();
 25     $amqp->queue(QueueName, AMQP_DURABLE)->declareQueue();
 26     $amqp->bindQueue(RoutingKey);
 27 
 28     //接收消息
 29     $amqp->consume(function($envelope, $queue){
 30     $msg = $envelope->getBody();
 31     echo $msg . "\n";
 32     }, AMQP_AUTOACK); //自动应答
 33 
 34 }
 35  */
 36 
 37 class Amqp extends AMQPConnection
 38 {
 39     
 40     protected $channel;
 41     protected $exchange;
 42     protected $queue;
 43 
 44     public function __construct($host='127.0.0.1', $port=5672, $user='guest', $passwd='guest', $vhost='/')
 45     {
 46         $credentials = is_array($host) ? $host : [
 47             'host'      => $host,
 48             'port'      => $port,
 49             'login'     => $user,
 50             'password'  => $passwd,
 51             'vhost'     => $vhost
 52         ];
 53         parent::__construct($credentials);
 54     }
 55 
 56 
 57     /**
 58      * 创建频道
 59      * @return AMQPChannel
 60      * @throws AMQPConnectionException
 61      */
 62     public function channel()
 63     {
 64         if (!$this->channel) {
 65             parent::connect();
 66             $this->channel = new \AMQPChannel($this);
 67         }
 68         return $this->channel;
 69     }
 70 
 71     /**
 72      * 创建交换器
 73      * @param string $name
 74      * @param string $type
 75      * @param null $flags
 76      * @return AMQPExchange
 77      * @throws AMQPConnectionException
 78      * @throws AMQPExchangeException
 79      */
 80     public function exchange($name='', $type='', $flags=null)
 81     {
 82         if (!$this->exchange) {
 83             $this->exchange = new \AMQPExchange($this->channel());
 84         }
 85         $name && $this->exchange->setName($name);
 86         $type && $this->exchange->setType($type);
 87         is_integer($flags) && $this->exchange->setFlags($flags);
 88 
 89         return $this->exchange;
 90     }
 91 
 92     /**
 93      * 创建队列
 94      * @param string $name
 95      * @param null $flags
 96      * @return AMQPQueue
 97      * @throws AMQPConnectionException
 98      * @throws AMQPQueueException
 99      */
100     public function queue($name='', $flags=null)
101     {
102         if (!$this->queue) {
103             $this->queue = new \AMQPQueue($this->channel());
104         }
105 
106         $name && $this->queue->setName($name);
107         is_integer($flags) && $this->queue->setFlags($flags);
108 
109         return $this->queue;
110     }
111 
112     /**
113      * 发布交换器
114      * @return bool
115      * @throws AMQPChannelException
116      * @throws AMQPConnectionException
117      * @throws AMQPExchangeException
118      */
119     public function declareExchange()
120     {
121         return $this->exchange()->declareExchange();
122     }
123 
124     /**
125      * 发布队列
126      * @return int
127      * @throws AMQPChannelException
128      * @throws AMQPConnectionException
129      * @throws AMQPQueueException
130      */
131     public function declareQueue()
132     {
133         return $this->queue()->declareQueue();
134     }
135 
136     /**
137      * 绑定队列
138      * @param string $routing_key
139      * @param array $arguments
140      * @return bool
141      * @throws AMQPChannelException
142      * @throws AMQPConnectionException
143      * @throws AMQPExchangeException
144      * @throws AMQPQueueException
145      */
146     public function bindQueue($routing_key='', $arguments=[])
147     {
148         return $this->queue()->bind($this->exchange()->getName(), $routing_key, $arguments);
149     }
150 
151 
152     /**
153      * 发布消息
154      * @param callable|null $callback
155      * @param int $flags
156      * @param null $consumerTag
157      * @return bool
158      * @throws AMQPChannelException
159      * @throws AMQPConnectionException
160      * @throws AMQPExchangeException
161      */
162     public function publish($message, $routing_key=null, $flags=AMQP_NOPARAM, array $attributes=[])
163     {
164         return $this->exchange()->publish($message, $routing_key, $flags, $attributes);
165     }
166 
167     public function consume(callable $callback=null, $flags=AMQP_NOPARAM, $consumerTag = null)
168     {
169         $this->queue()->consume($callback, $flags, $consumerTag);
170     }
171 
172     /**
173      * 删除交换器
174      * @param null $name
175      * @param int $flags
176      * @throws AMQPChannelException
177      * @throws AMQPConnectionException
178      * @throws AMQPExchangeException
179      */
180     public function deleteExchange($name = null, $flags=AMQP_NOPARAM)
181     {
182         $this->exchange()->delete($name, $flags);
183     }
184 
185     /**
186      * 删除队列
187      * @param int $flags
188      * @throws AMQPChannelException
189      * @throws AMQPConnectionException
190      * @throws AMQPQueueException
191      */
192     public function deleteQueue($flags=AMQP_NOPARAM)
193     {
194         $this->queue()->delete($flags);
195     }
196 }

 

posted @ 2023-05-26 14:44  心随所遇  阅读(42)  评论(0编辑  收藏  举报