Linux教程之ubuntu下手动编译php-amqp扩展教程
来源:互联网 发布:七星彩缩水软件 编辑:程序博客网 时间:2024/05/17 06:28
Linux教程之ubuntu下手动编译php-amqp扩展教程
首先,神马是amqp?介绍在这里,简单的讲就是高级队列协议。而这个扩展就是为了让php可以支持amqp协议与相关的队列服务通讯。
优点:可以解决服务器处理的并发问题。
高级消息队列协议(AMQP)是一个异步消息传递所使用的应用层协议规范。作为线路层协议,而不是API(例如JMS),AMQP 客户端能够无视消息的来源任意发送和接受信息。现在,已经有相当一部分不同平台的服务器和客户端可以投入使用。
(一)基本概念
RabbitMQ 是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协 议)的标准实现。如果不熟悉AMQP,直接看RabbitMQ的文档会比较困难。不过它也只有几个关键概念,这里简单介绍。
几个概念说明:
- Broker:简单来说就是消息队列服务器实体。
- Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
- Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
- Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
- Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
- vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
- producer:消息生产者,就是投递消息的程序。
- consumer:消息消费者,就是接受消息的程序。
- channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
(二)使用流程
即 Client - AMQP server - Client
左边的Client向右边的Client发送消息,流程:
- 获取Conection
- 获取Channel
- 定义Exchange,Queue
- 使用一个RoutingKey将Queue Binding到一个Exchange上
- 通过指定一个Exchange和一个RoutingKey来将消息发送到对应的Queue上,
- 接收方在接收时也是获取connection,接着获取channel,然后指定一个Queue直接到它关心的Queue上取消息,它对Exchange,RoutingKey及如何binding都不关心,到对应的Queue上去取消息就OK了
由于ubuntu的默认源里面没有php5-amqp这个包,所以要用上amqp得考手动编译。
准备工作:
安装php编译工具
sudo apt-get install php5-dev
安装rabbitmq的库
sudo apt-get install librabbitmq-dev
如果你的Linux发行版没有现成的librabbitmq-dev包,那么可以通过下载源码编译安装
然后如果你没有安装git话请安装一下git,因为我们要从官方的版本库中获取源代码
克隆源码并编译
git clone git://github.com/alanxz/rabbitmq-c.gitcd rabbitmq-cgit submodule initgit submodule update
编译库
autoreconf -i && ./configure && make && sudo make install
然后我们需要去下载php扩展的源代码,地址在此:
http://pecl.php.net/package/amqp
当前最新版本为1.4.0
wget http://pecl.php.net/get/amqp-1.4.0.tgztar zxf amqp-1.4.0.tgzcd amqp-1.4.0/phpize && ./configure --with-amqp && make && sudo make install
创建配置文件
sudo echo "extension = amqp.so" > /etc/php5/conf.d/amqp.ini
然后重启你的web服务器或者php-fpm并打印phpinfo,如果见到以下的内容就说明扩展安装好了
例子
生产方
/** * PHP amqp(RabbitMQ) Demo - publisher * 生产者:发送消息 * 逻辑:创建连接-->创建channel-->创建交换机对象-->发送消息* *///配置信息$conn_args = array( 'host' => 'localhost', 'port' => '5672', 'login' => 'guest', 'password' => 'guest', 'vhost'=>'/');$e_name = 'e_lamp'; //交换机名$k_route = 'key_1'; //路由key//创建连接和channel$conn = new AMQPConnection($conn_args);if (!$conn->connect()) { die("Cannot connect to the broker!\n");}$channel = new AMQPChannel($conn);//消息内容$message = "TEST MESSAGE! 测试消息!";//创建交换机对象$ex = new AMQPExchange($channel);$ex->setName($e_name);//发送消息//$channel->startTransaction(); //开始事务for($i=0; $i<5; ++$i){ echo "Send Message:".$ex->publish($message, $k_route)."\n";}//$channel->commitTransaction(); //提交事务$conn->disconnect();
消费方
/** * PHP amqp(RabbitMQ) Demo - consumer * 消费者:接收消息 * 逻辑:创建连接-->创建channel-->创建交换机-->创建队列-->绑定交换机/队列/路由键-->接收消息* *///配置信息$conn_args = array( 'host' => 'localhost', 'port' => '5672', 'login' => 'guest', 'password' => 'guest', 'vhost'=>'/');$e_name = 'e_lamp'; //交换机名$q_name = 'q_lamp'; //队列名$k_route = 'key_1'; //路由key//创建连接和channel$conn = new AMQPConnection($conn_args);if (!$conn->connect()) { die("Cannot connect to the broker!\n");}$channel = new AMQPChannel($conn);//创建交换机$ex = new AMQPExchange($channel);$ex->setName($e_name);$ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型$ex->setFlags(AMQP_DURABLE); //持久化echo "Exchange Status:".$ex->declare()."\n";//创建队列$q = new AMQPQueue($channel);$q->setName($q_name);$q->setFlags(AMQP_DURABLE); //持久化echo "Message Total:".$q->declare()."\n";//绑定交换机与队列,并指定路由键echo 'Queue Bind: '.$q->bind($e_name, $k_route)."\n";//阻塞模式接收消息echo "Message:\n";while(True){ $q->consume('processMessage'); //$q->consume('processMessage', AMQP_AUTOACK); //自动ACK应答}$conn->disconnect();/*** 消费回调函数* 处理消息*/function processMessage($envelope, $queue) { $msg = $envelope->getBody(); echo $msg."\n"; //处理消息 $queue->ack($envelope->getDeliveryTag()); //手动发送ACK应答}
0 0
- Linux教程之ubuntu下手动编译php-amqp扩展教程
- ubuntu下手动安装php-amqp模块教程
- linux下手动安装git教程
- ubuntu下手动编译openjdk7
- linux编译安装rabbitmq-c & 编译PHP扩展amqp
- linux编译安装rabbitmq-c & 编译PHP扩展amqp
- linux下编译php的amqp扩展(for rabbimq)
- Ubuntu下手动编译Tesseract-ocr
- ubuntu下手动编译安装mysql笔记
- Linux下手动编译安装Apache2.x
- linux下手动编译安装LAMP平台
- Linux 下手动编译动态库(.so)
- php amqp消息队列教程1-了解amqp协议
- linux下 php安装AMQP扩展 与AMQP收发消息
- Ubuntu下手动给自己编译的Android系统配置sdcard
- Ubuntu环境下手动编译OpenJDK1.6源码
- Linux下php安装imagick扩展教程
- 【教程】Linux安装php扩展memcache
- 2016年校招开始了,Are you ready ?
- No Team Selected:A team must be selected to run 'ProjectName' on iPhoneName
- WebGL 显示的文字变模糊
- 只恨当初没有你——C++等级选择篇(一)
- cocos2dx-3.8.1在Windows--vs2013上的项目创建
- Linux教程之ubuntu下手动编译php-amqp扩展教程
- android 导入so文件,编译报错
- 原生js实现歌词滚动以及卡拉OK效果
- 第四周项目三数据结构实践(三)——单链表:递增判断
- js判断浏览器类型
- AppManager管理Activity工具类
- LeetCode(48) Binary Tree Preorder Traversal
- Android AsyncTask完全解析,带你从源码的角度彻底理解
- centos 安装nodejs