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实现消息队列的案例