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' => ,'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.php配置文件
return array(
'amqp'=>array(
array(
'host' => '127.0.0.1',
'port' => '',
'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',''); $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();
RabbitMQ学习之(五)_一个基于PHP的RabbitMQ操作类的更多相关文章
- 一个基于PDO的数据库操作类(新) 一个PDO事务实例
<?php /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录 ...
- 【opencv学习笔记五】一个简单程序:图像读取与显示
今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...
- RabbitMQ学习笔记五:RabbitMQ之优先级消息队列
RabbitMQ优先级队列注意点: 1.只有当消费者不足,不能及时进行消费的情况下,优先级队列才会生效 2.RabbitMQ3.5以后才支持优先级队列 代码在博客:RabbitMQ学习笔记三:Java ...
- rabbitmq学习(五):springboot整合rabbitmq
一.Springboot对rabbitmq的支持 springboot提供了对rabbitmq的支持,并且大大简化了rabbitmq的相关配置.在springboot中,框架帮我们将不同的交换机划分出 ...
- RabbitMQ学习系列(三): C# 如何使用 RabbitMQ
上一篇已经讲了Rabbitmq如何在Windows平台安装,还不了解如何安装的朋友,请看我前面几篇文章:RabbitMQ学习系列一:windows下安装RabbitMQ服务 , 今天就来聊聊 C# 实 ...
- RabbitMQ学习之:(十)AMQP和RabbitMQ介绍 (转贴+我的评论)
From: http://www.infoq.com/cn/articles/AMQP-RabbitMQ 准备开始 高级消息队列协议(AMQP1)是一个异步消息传递所使用的应用层协议规范.作为线路层协 ...
- MongoDB学习(五)使用Java驱动程序3.3操作MongoDB快速入门
[引言] 毕竟现在MongoDB还是出于成长阶段,所以现在网上相关的资料很少,而且大部分还都是针对于MongoDB的老版本的.再加上MongoDB的频繁升级.重大更新等等,导致菜鸟学习的难度增大. 好 ...
- [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏
前言 这款安卓小游戏是基于SurfaceView的飞行射击类游戏,采用Java来写,没有采用游戏引擎,注释详细,条理比较清晰,适合初学者了解游戏状态转化自动机和一些继承与封装的技巧. 效果展示 ...
- rabbitmq学习(五) —— 路由
绑定(Bindings) 在上一个教程中,我们已经使用过绑定.你可能会记得如下代码: channel.queueBind(queueName, EXCHANGE_NAME, "") ...
随机推荐
- 【黑金原创教程】【TimeQuest】【第一章】TimeQuest 静态时序分析模型的概念
声明:本文为黑金动力社区(http://www.heijin.org)原创教程,如需转载请注明出处,谢谢! 黑金动力社区2013年原创教程连载计划: http://www.cnblogs.com/ ...
- msvcp71.dll 怎么丢失的?如何修复
解决方法:另一台电脑上下载这个dll,再用优盘拷回来,复制到c:\windows\system32\下. 个人遇到的情况:迅雷下载东西时,或者在操作迅雷时出现的. win7 64位下 点击下载
- 面试之一:CMS收集器整理
CMS收集器整理 @white 基本说明: 目标:获取最短回收停顿时间 算法:标记-清除算法 线程:并发 步骤: 初始标记:(会STP) 标记 GC Roots 能直接关联到的对象,速度很快 并发 ...
- Oracle Schema Objects——Tables——TableStorage
Oracle Schema Objects Table Storage Oracle数据库如何保存表数据? Oracle Database uses a data segment in a table ...
- swift中类与结构体
写了12个Person来复习,不过完成同样的代码需要敲键盘的次数相比OC确实少了很多,这很多应该归功于Swift中不写分号,以及少了OC中的中括号. 一.类与结构体 两者在Swift中差不了多少了 类 ...
- win10 计算器calc命令打不开
解决方法: 1.用管理员身份运行WindowsPowerShell: 2.用控制台命令Get-AppxPackage读取微软应用列表: 3.找到NAME那里有Windows calculator的,这 ...
- Linux下安装谷歌访问助手,解压缩时出现中文乱码
1.sudo apt-get install unar 安装unar 2.unar 谷歌访问助手chrome版本.zip 注意:使用 lsar 命令可以查看压缩文件内有那些文件: 例:lsar 谷 ...
- 前端开发 - jsDom
一.jsDom简介 jsDom = javascript document object model在JS中,所有的事物都是节点,元素.文本等都是节点.应用场景:可以通过节点进行DOM对象的增删改查 ...
- postgresql导出sql执行结果到文件的方法(转)
原文:http://blog.sina.com.cn/s/blog_840dd283010178jz.html 对于一些特殊字符,比如字符
- 22.Atomicity and Transactions-官方文档摘录
原子性和事务 1 在单个文档修改多个嵌入文档,写操作都在文档级别上都是原子的 2 在单个写操作修改多个文档时,每个文档的修改都具有原子性,但是,作为一个整体的操作,并不是原子的.其他操作可能有交互.使 ...