php消息队列处理实践 ,利用AMQP和redis两种方法
来源:互联网 发布:吉林软件行业协会 编辑:程序博客网 时间:2024/05/22 07:42
一:利用AMQP方法
二:利用redis做消息队列处理
类 amqp.php<?phpclass 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()."\n"; //队列内容总数$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()."\n"; //绑定交换机与队列,并指定路由键 //echo "queue status: ".$q->declare();//echo "\n";//echo 'Queue Bind: '.$q->bind($this->e_name, $this->k_route)."\n"; //echo "\n"; $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 "==========\n";$messages = $q->get(AMQP_AUTOACK);$return[]=json_decode($messages->getBody(),true); //echo "\n"; }$this->conn->disconnect();return $return;}}
配置文件:
config.phpreturn array('amqp'=>array(array('host' => 'localhost','port' => '5672','vhost' => '/','user' => 'guest','password' => 'guest' )),);
接收并处理文件:
get.phprequire_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();
加入队列文件:
send.phprequire_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);
二:利用redis做消息队列处理
//redis出队列POPfunction actionRedisPop(){$redis = new Redis;$redis->connect('cloud_redis',9002); while ($usr = $redis->rPop('list_test')) {$array = json_decode($usr,true);print_R($array);}}//redis入队列pushfunction actionRedisPush(){$redis = new Redis;$redis->connect('cloud_redis',9002); $data = array('list_name'=>'usr','value'=>date('Y-m-d H:i:s'));$json = json_encode($data);var_dump($redis->lPush('list_test', $json));}
- php消息队列处理实践 ,利用AMQP和redis两种方法
- 消息队列、AMQP和RabbitMQ
- php amqp消息队列教程1-了解amqp协议
- PHP中使用AMQP消息队列
- PHP中使用AMQP消息队列|LNMP
- php amqp 消息队列 RabbitMQ 基本概念(二)
- php amqp 消息队列 RabbitMQ 安装(一)
- PHP中利用redis实现消息队列处理高并发请求--简洁代码实现效果
- PHP中利用redis实现消息队列处理高并发请求
- PHP中利用redis实现消息队列处理高并发请求
- 消息队列之JMS和AMQP对比
- 消息队列之JMS和AMQP对比
- 消息队列之JMS和AMQP对比
- 消息队列之JMS和AMQP对比
- 消息队列之JMS和AMQP对比
- 消息队列之JMS和AMQP对比
- 消息队列之JMS和AMQP对比
- 消息队列之JMS和AMQP对比
- 不要挡住我的阳光(第欧根尼)续
- android之调用系统打电话与发短信界面
- jsp页面在servlet返回后,js/jquery不起作用的原因
- C++ map的基本操作和使用
- (转)Android中View绘制优化二一---- 使用<include />标签复用布局文件
- php消息队列处理实践 ,利用AMQP和redis两种方法
- 管道流对象及其应用
- TortoiseSVN使用简介
- struts2接收前台参数的3个方法
- cookies和session的区别
- CloudStack 在Windows 平台上的开发环境设置
- 简单的工厂模式
- 本人学习Makefile的总结和分享
- Weblogic11G,日志功能按天分割记录