PHP和RabbitMQ实现消息队列的案例

  

PHP和RabbitMQ实现消息队列的案例?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!

先安装PHP对应的RabbitMQ,这里用的是php_amqp不同的扩展实现方式会有细微的差异。
php扩展地址:http://pecl.php.net/package/amqp
具体以官网为准,http://www.rabbitmq.com/getstarted.html

介绍

config . php配置信息
BaseMQ。php MQ基类
ProductMQ。php生产者类
ConsumerMQ。php消费者类
Consumer2MQ。php消费者2(可有多个)

配置。php

 & lt; php ?/* *
  *由PhpStorm。
  *用户:个人电脑
  *日期:2018/12/13
  *时间:十四11
  */名称空间MyObjSummary \ rabbitMQ;/* *成员
  * AMQPChannel
  * AMQPConnection
  * AMQPEnvelope
  * AMQPExchange
  * AMQPQueue
  *类BaseMQ
  * @package MyObjSummary \ rabbitMQ
  */类BaseMQ
  {/* * MQ通道
  * @var \ AMQPChannel
  */公共AMQPChannel美元;/* * MQ链接
  * @var \ AMQPConnection
  */公共AMQPConnection美元;/* * MQ信封
  * @var \ AMQPEnvelope
  */公共AMQPEnvelope美元;/* * MQ交换
  * @var \ AMQPExchange
  */公共AMQPExchange美元;/* * MQ队列
  * @var \ AMQPQueue
  */公共AMQPQueue美元;/* * conf
  * @var
  */公共配置美元;/* *交易
  * @var
  */公共交换美元;/* *链接
  * BaseMQ构造函数。
  * @throws \ AMQPConnectionException
  */公共函数__construct ()
  {
  $相依=需要& # 39;config . php # 39;;
  如果(! $ conf)
  把新\ AMQPConnectionException(& # 39;配置错误! & # 39;);
  配置($ this→相依=$ & # 39;主机# 39;];
  配置[这→美元交换=$ & # 39;交换# 39;];
  $ this→AMQPConnection=new \ AMQPConnection ($ this→conf);
  如果(! $ this→AMQPConnection→connect ())
  把新\ AMQPConnectionException(“不能连接到代理! \ n");
  }/* *
  *紧密联系
  */公共函数close ()
  {
  $ this→AMQPConnection→断开();
  }/* *通道
  * @return \ AMQPChannel
  * @throws \ AMQPConnectionException
  */公共频道()函数
  {
  如果(! $ this→AMQPChannel) {
  $ this→AMQPChannel=new \ AMQPChannel ($ this→AMQPConnection);
  }
  返回$ this→AMQPChannel;
  }/* *交易
  * @return \ AMQPExchange
  * @throws \ AMQPConnectionException
  * @throws \ AMQPExchangeException
  */公共函数交换()
  {
  如果(! $ this→AMQPExchange) {
  $ this→AMQPExchange=new \ AMQPExchange ($ this→频道());
  $ this→AMQPExchange→setName ($ this→交流);
  }
  返回$ this→AMQPExchange;
  }/* *队列
  * @return \ AMQPQueue
  * @throws \ AMQPConnectionException
  * @throws \ AMQPQueueException
  */公共函数队列()
  {
  如果(! $ this→AMQPQueue) {
  $ this→AMQPQueue=new \ AMQPQueue ($ this→频道());
  }
  返回$ this→AMQPQueue;
  }/* *信封
  * @return \ AMQPEnvelope
  */公共函数信封()
  {
  如果(! $ this→AMQPEnvelope) {
  $ this→AMQPEnvelope=new \ AMQPEnvelope ();
  }
  返回$ this→AMQPEnvelope;
  }
  }

ProductMQ。php

& lt; php ?//生产者P   名称空间MyObjSummary \ rabbitMQ;   需要& # 39;BaseMQ.php& # 39;;   类ProductMQ BaseMQ延伸   {   私人$路线=[& # 39;你好# 39;& # 39;词# 39;];//路由键/* *   * ProductMQ构造函数。   * @throws \ AMQPConnectionException   */公共函数__construct ()   {   父:__construct ();   }/* *只控制发送成功不接受消费者是否收的到   * @throws \ AMQPChannelException   * @throws \ AMQPConnectionException   * @throws \ AMQPExchangeException   */公共函数run ()   {//频道   频道=这→美元通道();//创建交换机对象   前女友=这→美元交换();//消息内容   $消息=& # 39;产品信息& # 39;.rand (99999);//开始事务   美元通道→startTransaction ();   发出美元=true;   foreach ($ this→路线路线美元){   发出=前→美元发布(消息,路线美元);   回声“发送信息:“。美元发出干净\ n";   }   如果(! $发出){   美元通道→rollbackTransaction ();   }   美元通道→commitTransaction ();//提交事务   $ this→close ();   死;   }   }   尝试{   (新ProductMQ())→运行();   }抓住美元(\异常例外){   var_dump()美元异常→getMessage ());   }

PHP和RabbitMQ实现消息队列的案例