Rabbitmq各方法的作用详解
exchange_declare('direct_logs', 'direct', false, false, false);// 这个是申明交换器,如果没有申明就给默认队列的这个交换器,而且发送的类型默认是direct)
|
顺序 |
参数名 |
默认值 |
作用 |
|
$exchange |
无 |
交换机名 |
|
|
$type |
无 |
交换机类型,分别有direct、fanout、topic |
|
|
$passsive |
false |
只判断不创建(一般用于判断该交换机是否存在),如果你希望查询交换机是否存在.而又不想在查询时创建这个交换机.设置此为 |
|
|
$durable |
false |
表示了如果MQ服务器重启,这个交换机是否要重新建立(如果设置为true则重启mq,该交换机还是存在,相当于持久化。) |
|
|
$auto_delete |
true |
无用自动销毁。如果绑定的所有队列都不在使用了.是否自动删除这个交换机.(比如设置为true,它绑定的对列全部被删除后,该交换器会被自动删除,) |
|
|
$internal |
false |
内部交换机.即不允许使用客户端推送消息.MQ内部可以让交换机作为一个队列绑定到另外一个交换机下.想想一下以太网的交换机就是了.所以开启这个属性,表示是一个他直接收其他交换机发来的信息 |
|
|
$nowait |
false |
如果为True则表示不等待服务器回执信息.函数将返回NULL,可以提高访问速度..应用范围不确定 |
|
|
$arguments |
null |
额外的一些参数,比如优先级,什么的.需要单独开篇讲 |
|
|
$ticket |
null |
未知 |
queue_declare('queueName', false, true, false, true, false)
|
顺序 |
参数名 |
默认值 |
作用 |
|
$queue |
无 |
队列名.而存在默认值的意思是.你可以创建一个不重复名称的一个临时队列.(交换机没法创建临时的) |
|
|
$passsive |
false |
只判断不创建(判断该队列是否存在) 只查询不创建.如果为true,如果存在这个队列,则会返回队列的信息.如果不存在这个队列..则会抛异常(与交换机不同的是,如果交换机判断存在,则返回NULL,否则异常) |
|
|
$durable |
false |
重启重建(持久化) |
|
|
$exclusive |
false |
排他队列,如果你希望创建一个队列,并且只有你当前这个程序(或进程)进行消费处理.不希望别的客户端读取到这个队列.用这个方法甚好.而同时如果当进程断开连接.这个队列也会被销毁.不管是否设置了持久化或者自动删除. |
|
|
$auto_delete |
true |
自动销毁(当最后一个消费者取消订阅时队列会自动移除,对于临时队列只有一个消费服务时适用,) |
|
|
$nowait |
false |
执行后不需要等结果 |
|
|
$arguments |
null |
$arguments = new AMQPTable([ 'x-message-ttl' => 10000, // 延迟时间 (毫秒)创建queue时设置该参数可指定消息在该queue中待多久,可根据x-dead-letter-routing-key和x-dead-letter-exchange生成可延迟的死信队列。 'x-expires' => 26000, // 队列存活时间 如果一个队列开始没有设置存活时间,后面又设置是无效的。 'x-dead-letter-exchange' => 'exchange_direct_ttl3', // 延迟结束后指向交换机(死信收容交换机) 'x-dead-letter-queue' => 'queue_ttl3', // 延迟结束后指向队列(死信收容队列), //'x-dead-letter-routing-key' => 'queue_ttl3', // 设置routing-key //'x-max-priority'=>'10' //声明优先级队列.表示队列应该支持的最大优先级。建议使用1到10之间.该参数会造成额外的CPU消耗。 ] ); |
|
|
$ticket |
null |
queue_bind('queue_delete1', 'exchange_delete1');
|
参数序号 |
参数名 |
作用 |
|
$queue |
队列名 |
|
|
$exchange |
交换机名 |
|
|
$routing_key |
路由名(对应) |
|
|
$nowait |
不等待执行结果 |
|
|
$arguments |
额外参数 |
|
|
$ticket |
…. |
$message = new AMQPMessage("消息内容",['配置项'=>'配置值']);
|
配置项 |
类型 |
说明 |
|
content_type |
短文本 |
MIME类型表示消息是一种什么类型的格式,参考MIME类型 |
|
content_encoding |
短文本 |
正文传输编码,比如内容是gzip压缩的.值就是gzip,参考 |
|
application_headers |
数组 |
请求的headers信息 |
|
delivery_mode |
数字 |
表示是否持久化,1为否,2为是 参考 |
|
priority |
数字 |
发送权重,也就是优先级 |
|
correlation_id |
短文本 |
相关性ID 参考 |
|
reply_to |
短文本 |
消息被发送者处理完后,返回回复时执行的回调(在rpc时会用到) |
|
expiration |
短文本 |
存活时间,毫秒数 |
|
message_id |
短文本 |
扩展属性 |
|
timestamp |
数字 |
时间戳 |
|
type |
短文本 |
扩展属性 |
|
user_id |
短文本 |
扩展属性 |
|
app_id |
短文本 |
扩展属性 |
|
cluster_id |
短文本 |
扩展属性 |
Basic_publish($msg, $exchange, $routing_key)
|
顺序 |
参数名 |
作用 |
|
$msg |
消息对象 |
|
|
$exchange |
消息对象(交换机名称) 如果没有指定交换器,会指定一个默认的交换器,第三个参数是路由键,当申明一个队列时,它会自动绑定到默认交换器,并以队列名称作为路由键。那么这段代码会自动发送到hello的队列 (hello队列必须事先申明好)。所以这种消息,当有多个进程时会均匀的分给不同的进程处理 |
|
|
$routing_key |
消息的路由名 |
|
|
$mandatory |
消息至少有一个队列能够接受,如果交换机无法把消息发送到具体的队列中,是否要把消息发送到失败投递记录中,而不是让其消失(当mandatory标志位设置为true时,如果exchange根据自身类型和消息routingKey无法找到一个合适的queue存储消息,那么broker会调用basic.return方法将消息返还给生产者;当mandatory设置为false时,出现上述情况broker会直接将消息丢弃;通俗的讲,mandatory标志告诉broker代理服务器至少将消息route到一个队列中,否则就将消息return给发送者;) |
|
|
$immediate |
这个是一个被作废的属性. |
|
|
$ticket |
function 接收消息回调($message)
{
$message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag']);
}
代码的意思为,根据消息的delivery_info['channel']找到通道,并调用通道的basic_ack方法发送消息的确认内容.
##泄露问题
如果我们只是接受了消息,并进行处理.但是处理完后.没有发起ack就会导致服务器上的消息一直堆积.服务器会发送新的消息.同时会记录当前的这个链接有哪些消息一直还没回复.(服务器认为你会回复,一直等待)。如果消费者进程停止掉重启..就会重新接收所有消息!
$channel->basic_qos(null, 1, null);
可告知RabbitMQ只有在consumer处理并确认了上一个message后才分配新的message给他,否则上一个没处理完会一直卡在这里,这个根据业务场景配置,
basic_qos注意事项:由于消费者自身处理能力有限,从rabbitmq获取一定数量的消息后,希望rabbitmq不再将队列中的消息推送过来,当对消息处理完后(即对消息进行了ack,并且有能力处理更多的消息)再接收来自队列的消息
这时候我们就需要要到basic_qos,
basic_qos($prefetch_size,
$prefetch_count, //最重要的参数,未确认的消息同时存在的个数;(也就是未ack的消息数,我们可以以此来作为记录失败数据的个数;)
$a_global
)
prefetch_count在no_ask=false的情况下生效,即在自动应答的情况下这两个值是不生效的
注意:如果我们有两个进程,一个设置prefetch_count为1,一个没有设置这个,这样只会有一个进程会等待确认,还有一个不会等待确认,这样容易导致不可预知的错误;当多个进程设置prefetch_count值时,相互之间的数据时没有影响的;比如两个进程都设置的是2那么总的未确认存在数是4;
basic_consume("TestQueue", "", false, false, false, false, $callback)
|
顺序 |
参数名 |
默认值 |
作用 |
|
queue |
消息要取得消息的队列名 |
||
|
consumer_tag |
消费者标签 |
||
|
no_local |
false |
这个功能属于AMQP的标准,但是rabbitMQ并没有做实现. |
|
|
no_ack |
false |
收到消息后,是否不需要回复确认即被认为被消费(在默认情况下,消息确认机制是关闭的。现在是时候开启消息确认机制,该参数设置为true,并且工作进程处理完消息后发送确认消息。) |
|
|
exclusive |
false |
排他消费者,即这个队列只能由一个消费者消费.适用于任务不允许进行并发处理的情况下.比如系统对接 |
|
|
nowait |
false |
不返回执行结果,但是如果排他开启的话,则必须需要等待结果的,如果两个一起开就会报错 |
|
|
callback |
null |
回调函数 |
|
|
ticket |
null |
||
|
arguments |
null |
Rabbitmq各方法的作用详解的更多相关文章
- jsp九大内置对象和其作用详解
jsp九大内置对象和其作用详解 JSP中一共预先定义了9个这样的对象,分别为:request.response.session.application.out.pagecontext.config.p ...
- Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量
Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量 一丶线程的理论知识 什么是线程: 1.线程是一堆指令,是操作系统调度 ...
- [转载]java中import作用详解
[转载]java中import作用详解 来源: https://blog.csdn.net/qq_25665807/article/details/74747868 这篇博客讲的真的很清楚,这个作者很 ...
- Linux(centos)系统各个目录的作用详解
Linux(centos)系统各个目录的作用详解 文件系统的类型 LINUX有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 普通文件:如文本文件.C语言元代码 ...
- shell脚本中常见的一些特殊符号和作用详解
这篇文章主要介绍了shell脚本中常见的一些特殊符号和它的作用详解,总结的很简洁,容易看懂,需要的朋友可以参考下 在编写Shell脚本时,我们需要会用到各种各样的特殊符号,通过这些特殊符号可以使我 ...
- .NET Excel导出方法及其常见问题详解
摘要:.NET Excel导出方法及其常见问题详解. 一.Excel导出的实现方法 在.net 程序开发中,对于Excel文件的导出我们一共有三种导出方式: 利用文件输出流进行读写操作 这种方式的导出 ...
- linux(CENTOS)系统各个目录的作用详解
Linux(CentOS)系统各个目录的作用详解 文件的类型 LINUX有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 普通文件:如文本文件.C语言元代码.S ...
- MySQL中的主键,外键有什么作用详解
MySQL中的主键,外键有什么作用详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 学关系型数据库的同学,尤其在学习主键和外键时会产生一定的困惑.那么今天我们就把这个困惑连根拔起 ...
- Python中__init__.py文件的作用详解
转自http://www.jb51.net/article/92863.htm Python中__init__.py文件的作用详解 http://www.jb51.net/article/86580. ...
随机推荐
- Build Telemetry for Distributed Services之OpenTracing指导:C#
官网链接:https://opentracing.io/guides/ 官方微博:https://medium.com/opentracing Welcome to the OpenTracing G ...
- 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_5.RabbitMQ研究-入门程序-生产者
1)java client 生产者和消费者都属于客户端,rabbitMQ的java客户端如下: 我们先用 rabbitMQ官方提供的java client测试,目的是对RabbitMQ的交互过程有个清 ...
- [Scikit-learn] 2.3 Clustering - kmeans
参考: 2.3. Clustering 2.4. Biclustering 2.1.2.3. The Dirichlet Process Clusering, GMM, Variational Inf ...
- Hadoop 部署之 Hive (五)
目录 一.Hive 简介 1.什么是 Hive 2.为什么使用 Hive 3.Hive 的特点 4.Hive 的架构 二.Hive 安装 1.MySQL 安装(datanode01) 2.MySQL ...
- oracle数据库可视化工具
1.TreeSoft基于web网页方式,管理维护oracle数据,功能包括:SQL在线执行,数据在线维护管理,数据导出,数据交换同步等. 支持MySQL,Oracle,DB2,PostgreSQL,S ...
- hdoj3586 (树形dp)
题目链接:https://vjudge.net/problem/HDU-3586 题意:一棵边权树,要删掉一些边使得每个叶子结点不能到达树根,且这些边的权值<=上限Max,且边权和小于m,求最小 ...
- Spring mybatis源码篇章-动态SQL基础语法以及原理
通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-Mybatis的XML文件加载 前话 前文通过Spring中配置mapperLocations属性来进行对m ...
- 原生js实现图片的3d效果
<!doctype html><html lang="en"><head><meta charset="UTF-8"& ...
- java xml解析方式(DOM、SAX、JDOM、DOM4J)
XML值可扩展标记语言,是用来传输和存储数据的. XMl的特定: XMl文档必须包含根元素.该元素是所有其他元素的父元素.XML文档中的元素形成了一颗文档树,树中的每个元素都可存在子元素. 所有XML ...
- Spring4学习回顾之路12-事务
事务:事务就是一系列的动作,它们被当做一个单独的工作单元,这些动作要么全部完成,要么全部不起作用:事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性.事务的四个关键属性(ACI ...