RabbitMq学习6-安装php-amqplib(RabbitMQ的phpAPI)
一、使用composer安装php-amqplib
1、在你的项目中添加一个 composer.json文件:
{
"require": {
"php-amqplib/php-amqplib": "2.6.*"
}
}
2、只要你已经安装Composer功能,你可以运行以下:
$ composer install
3、已经存在的项目则执行
$ composer update
这时在verdor目录就已经下载完毕 具体可以参考官方文档:https://github.com/php-amqplib/php-amqplib
二、使用php-amqplib
英文文档:http://www.rabbitmq.com/getstarted.html
中文文档:https://rabbitmq.shujuwajue.com/tutorials_with_php/[2]Work_Queues.md.html
(一)生产者:
1、创建连接 主要参数说明:
$host: RabbitMQ服务器主机IP地址
$port: RabbitMQ服务器端口
$user: 连接RabbitMQ服务器的用户名
$password: 连接RabbitMQ服务器的用户密码
$vhost: 连接RabbitMQ服务器的vhost(服务器可以有多个vhost,虚拟主机,类似nginx的vhost) $connection = new AMQPStreamConnection($host,$port,$user,$password,$vhost); 2、获取信道
// $channel_id 信道id,不传则获取$channel[“”]信道,再无则循环$this->channle数组,下标从1到最大信道数找第一个不是AMQPChannel对象的下标,实例化并返回AMQPChannel对象,无则抛出异常No free channel ids $channel = $connection->channel($channel_id); 3、在信道里创建交换器 # $exhcange_name 交换器名字
# $type 交换器类型:
’’ 默认交换机 匿名交换器 未显示声明类型都是该类型
fanout 扇形交换器 会发送消息到它所知道的所有队列,每个消费者获取的消息都是一致的
headers 头部交换器
direct 直连交换器,该交换机将会对绑定键(binding key)和路由键(routing key)进行精确匹配
topic 话题交换器 该交换机会对路由键正则匹配,必须是*(一个单词)、#(多个单词,以.分割) 、 user.key .abc.* 类型的key rpc
#$passive false
#durable false
#auto_detlete false $channel->exchange_declare($exhcange_name,$type,$passive,$durable,$auto_delete);
//常用设置 $passive=>false $durable=>false $auto_delete->false 4、创建要发送的信息 ,可以创建多个消息
#$data string类型 要发送的消息
#$properties array类型 设置的属性,比如设置该消息持久化[‘delivery_mode’=>2] $msg = new AMQPMessage($data,$properties) 5、发送消息 #$msg object AMQPMessage对象
#$exchange string 交换机名字
#$routing_key string 路由键 如果交换机类型
fanout: 该值会被忽略,因为该类型的交换机会把所有它知道的队列发消息,无差别区别
direct 只有精确匹配该路由键的队列,才会发送消息到该队列
topic 只有正则匹配到的路由键的队列,才会发送到该队列
$channel->basic_publish($msg,$exchange,$routing_key); 6、关闭信道和链接 $channel->close();
$connection->close(); (二)消费者:
1、创建连接 主要参数说明:
$host: RabbitMQ服务器主机IP地址
$port: RabbitMQ服务器端口
$user: 连接RabbitMQ服务器的用户名
$password: 连接RabbitMQ服务器的用户密码
$vhost: 连接RabbitMQ服务器的vhost(服务器可以有多个vhost,虚拟主机,类似nginx的vhost) $connection = new AMQPStreamConnection($host,$port,$user,$password,$vhost); 2、获取信道
// $channel_id 信道id,不传则获取$channel[“”]信道,再无则循环$this->channle数组,下标从1到最大信道数找第一个不是AMQPChannel对象的下标,实例化并返回AMQPChannel对象,无则抛出异常No free channel ids $channel = $connection->channel($channel_id); 3、在信道里创建交换器,未显式声明交换机都是使用匿名交换机 # $exhcange_name 交换器名字
# $type 交换器类型:
’’ 默认交换机 匿名交换器 未显示声明类型都是该类型
fanout 扇形交换器 会发送消息到它所知道的所有队列,每个消费者获取的消息都是一致的
headers 头部交换器
direct 直连交换器,该交换机将会对绑定键(binding key)和路由键(routing key)进行精确匹配
topic 话题交换器 该交换机会对路由键正则匹配,必须是*(一个单词)、#(多个单词,以.分割) 、 user.key .abc.* 类型的key rpc
#$passive false
#durable false
#auto_detlete false $channel->exchange_declare($exhcange_name,$type,$passive,$durable,$auto_delete);
//常用设置 $passive=>false $durable=>false $auto_delete->false 4、声明消费者队列 (1) 非持久化队列,RabbitMQ退出或者崩溃时,该队列就不存在 list($queue_name, ,) = $channel->queue_declare("", false, false, false, false); (2) 持久化队列(需要显示声明,第三个参数要设置为true),保存到磁盘,但不一定完全保证不丢失信息,因为保存总是要有时间的。 list($queue_name, ,) = $channel->queue_declare("ex_queue", false, false, true, false); 5、绑定交换机,当未显示绑定交换机时,默认是绑定匿名交换机 #绑定:交换机与队列的关系,如下面这句代码意思是,$queue_name队列对logs交换机数据感兴趣,该队列就消费该交换机传过来的数据:这个队列(queue)对这个交换机(exchange)的消息感兴趣. $binding_key默认为空,表示对该交换机所有消息感兴趣,如果值不为空,则该队列只对该类型的消息感兴趣(除了fanout交换机以外)
$channel->queue_bind($queue_name, 'logs', $binding_key); 6、消费消息 #该代码表示使用basic.qos方法,并设置prefetch_count=1。这样是告诉RabbitMQ,再同一时刻,不要发送超过1条消息给一个工作者(worker),直到它已经处理了上一条消息并且作出了响应。这样,RabbitMQ就会把消息分发给下一个空闲的工作者(worker),轮询、负载均衡配置
$channel->basic_qos(null, 1, null); #第四个参数 no_ack = false 时,表示进行ack应答,确保消息已经处理
#$callback 表示回调函数,传入消息参数
$channel->basic_consume('ex_queue', '', false, false, false, false, $callback); $callback = function($msg){
echo " [x] Received ", $msg->body, "\n";
sleep(substr_count($msg->body, '.'));
echo " [x] Done", "\n";
} #当no_ack=false时, 需要写下行代码,否则可能出现内存不足情况 $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']); #监听消息,一有消息,立马就处理
while(count($channel->callbacks)) {
$channel->wait();
}
RabbitMq学习6-安装php-amqplib(RabbitMQ的phpAPI)的更多相关文章
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...
- 官网英文版学习——RabbitMQ学习笔记(十)RabbitMQ集群
在第二节我们进行了RabbitMQ的安装,现在我们就RabbitMQ进行集群的搭建进行学习,参考官网地址是:http://www.rabbitmq.com/clustering.html 首先我们来看 ...
- 官网英文版学习——RabbitMQ学习笔记(二)RabbitMQ安装
一.安装RabbitMQ的依赖Erlang 要进行RabbitMQ学习,首先需要进行RabbitMQ服务的安装,安装我们可以根据官网指导进行http://www.rabbitmq.com/downlo ...
- (转)RabbitMQ学习之安装
http://blog.csdn.net/zhu_tianwei/article/details/40832185 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客 ...
- RabbitMQ学习(一):RabbitMQ要点简介
转载:http://blog.csdn.net/leixiaotao_java/article/details/78909760#t0 1.什么是RabbitMQ? RabbitMQ是由Erlang语 ...
- RabbitMQ学习系列(六): RabbitMQ 高可用集群
前面讲过一些RabbitMQ的安装和用法,也说了说RabbitMQ在一般的业务场景下如何使用.不知道的可以看我前面的博客,http://www.cnblogs.com/zhangweizhong/ca ...
- RabbitMQ学习笔记(5)----RabbitMQ整合Spring
在Spring AMQP项目中Spring也提供了对RabbitMQ的支持,这里在之前学习SpringBoot的时候也整合过,但是今天这里使用的Spring的xml配置来整个rabbit. Sprin ...
- RabbitMQ学习笔记(八、RabbitMQ总结)
1.什么是消息中间件 Message Queue Middleware,简称MQ,是一种利用高效可靠的消息传递机制进行与平台无关的数据交互的技术. 2.MQ的作用 异步:类似于短信业务,将需要发送的消 ...
- RabbitMQ学习笔记(二、RabbitMQ结构)
目录: RabbitMQ几大组件 交换器类型 RabbitMQ运行流程 RabbitMQ几大组件:(与RabbitMQ第一节中AMQP一样,不细说) 1.生产者.消费者.消息 2.Broker:简单的 ...
随机推荐
- 【leetcode】1220. Count Vowels Permutation
题目如下: Given an integer n, your task is to count how many strings of length n can be formed under the ...
- GET和POST请求的区别和使用场景
本质上的区别: GET请求.处理.响应过程中只是产生一个TCP数据包,而POST请求会产生两个TCP数据包. 更具体地说,GET请求过程中头和请求正文数据一起到服务器端, 而POST请求过程中, ...
- 阿里云服务器 CentOS 7.5 64位 docker安装redis集群
网上有很多教程可以参考,但是遇到坑了...... 最后参考这个教程成功了.https://www.cnblogs.com/hbbbs/articles/10028771.html 安装docker 参 ...
- POJ 2182 Lost Cows (树状数组 && 二分查找)
题意:给出数n, 代表有多少头牛, 这些牛的编号为1~n, 再给出含有n-1个数的序列, 每个序列的数 ai 代表前面还有多少头比 ai 编号要小的牛, 叫你根据上述信息还原出原始的牛的编号序列 分析 ...
- linq/EF 使用技巧笔记
先上图 1.linq列转行(如图从上到下,action_type即power字段),其实严格意义上来说,并不是linq,只是用了循环 List<NavigationDto> leaf = ...
- Windows和Linux下搭建J2sdk的环境
J2SDK 作为jsp系统配置中必不可少的组件,越来越多的得到应用.下来是我整理的以往工作时搜集的资料.使用时方便查询,希望对广大的工程师有帮助. windows服务器环境下 j2sdk 的安装和环境 ...
- es之对文档进行更新操作
5.7.1:更新整个文档 ES中并不存在所谓的更新操作,而是用新文档替换旧文档: 在内部,Elasticsearch已经标记旧文档为删除并添加了一个完整的新文档并建立索引.旧版本文档不会立即消失 ,但 ...
- arguments详解——函数内命名参数之映射
首先,arguments对象是所有(非箭头)函数中都可用的局部变量.你可以使用arguments对象在函数中引用函数的参数.此对象包含传递给函数的每个参数,第一个参数在索引0处. arguments对 ...
- Linux下GCC去除调试信息
如果不去除调试信息,直白点说基本上是把代码公开了,不要带-g参数,还有就是需要带 -O2 -fvisibility=hidden -s 生成程序后可以用命令strip进一步去除不需要的符号 strip ...
- Mybaits 运行原理流程时序图
1 .初始化sqlsessionFactory 2openSession 3.getMapper返回接口的代理对象 包含了SqlSession对象 4.查询流程