callmode php_Rabbitmq各方法的作用详解

exchange_declare('direct_logs','direct',false,false,false);// 这个是申明交换器,如果没有申明就给默认队列的这个交换器,而且发送的类型默认是direct)

顺序

参数名

默认值

作用

1

$exchange

交换机名

2

$type

交换机类型,分别有direct、fanout、topic

3

$passsive

false

只判断不创建(一般用于判断该交换机是否存在),如果你希望查询交换机是否存在.而又不想在查询时创建这个交换机.设置此为true即可

如果交换机不存在,则会抛出一个错误的异常.如果存在则返回NULL

4

$durable

false

表示了如果MQ服务器重启,这个交换机是否要重新建立(如果设置为true则重启mq,该交换机还是存在,相当于持久化。)

我们的案例代码有点类似于在服务器设立一个数据库内存表,并且每次访问都要判定内存表是否存在.

而如果开启了这个属性,则相当于建了一个永久表.以后直接访问即可.不需要每次都判定是否存在.如同访问MYSQL。

5

$auto_delete

true

无用自动销毁。如果绑定的所有队列都不在使用了.是否自动删除这个交换机.(比如设置为true,它绑定的对列全部被删除后,该交换器会被自动删除,)

6

$internal

false

内部交换机.即不允许使用客户端推送消息.MQ内部可以让交换机作为一个队列绑定到另外一个交换机下.想想一下以太网的交换机就是了.所以开启这个属性,表示是一个他直接收其他交换机发来的信息

7

$nowait

false

如果为True则表示不等待服务器回执信息.函数将返回NULL,可以提高访问速度..应用范围不确定

8

$arguments

null

额外的一些参数,比如优先级,什么的.需要单独开篇讲

9

$ticket

null

未知

queue_declare('queueName', false, true, false, true, false)

顺序

参数名

默认值

作用

1

$queue

队列名.而存在默认值的意思是.你可以创建一个不重复名称的一个临时队列.(交换机没法创建临时的)

如获得通道后执行如下代码.

2

$passsive

false

只判断不创建(判断该队列是否存在) 只查询不创建.如果为true,如果存在这个队列,则会返回队列的信息.如果不存在这个队列..则会抛异常(与交换机不同的是,如果交换机判断存在,则返回NULL,否则异常)

3

$durable

false

重启重建(持久化)

4

$exclusive

false

排他队列,如果你希望创建一个队列,并且只有你当前这个程序(或进程)进行消费处理.不希望别的客户端读取到这个队列.用这个方法甚好.而同时如果当进程断开连接.这个队列也会被销毁.不管是否设置了持久化或者自动删除.

5

$auto_delete

true

自动销毁(当最后一个消费者取消订阅时队列会自动移除,对于临时队列只有一个消费服务时适用,)

6

$nowait

false

执行后不需要等结果

7

$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消耗。

]

);

8

$ticket

null

queue_bind('queue_delete1', 'exchange_delete1');

参数序号

参数名

作用

1

$queue

队列名

2

$exchange

交换机名

3

$routing_key

路由名(对应)

4

$nowait

不等待执行结果

5

$arguments

额外参数

6

$ticket

….

$message = new AMQPMessage("消息内容",['配置项'=>'配置值']);

配置项

类型

说明

content_type

短文本

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)

顺序

参数名

作用

1

$msg

消息对象

2

$exchange

消息对象(交换机名称) 如果没有指定交换器,会指定一个默认的交换器,第三个参数是路由键,当申明一个队列时,它会自动绑定到默认交换器,并以队列名称作为路由键。那么这段代码会自动发送到hello的队列    (hello队列必须事先申明好)。所以这种消息,当有多个进程时会均匀的分给不同的进程处理

3

$routing_key

消息的路由名

4

$mandatory

消息至少有一个队列能够接受,如果交换机无法把消息发送到具体的队列中,是否要把消息发送到失败投递记录中,而不是让其消失(当mandatory标志位设置为true时,如果exchange根据自身类型和消息routingKey无法找到一个合适的queue存储消息,那么broker会调用basic.return方法将消息返还给生产者;当mandatory设置为false时,出现上述情况broker会直接将消息丢弃;通俗的讲,mandatory标志告诉broker代理服务器至少将消息route到一个队列中,否则就将消息return给发送者;)

5

$immediate

这个是一个被作废的属性.

6

$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)

顺序

参数名

默认值

作用

1

queue

消息要取得消息的队列名

2

consumer_tag

消费者标签

3

no_local

false

这个功能属于AMQP的标准,但是rabbitMQ并没有做实现.

4

no_ack

false

收到消息后,是否不需要回复确认即被认为被消费(在默认情况下,消息确认机制是关闭的。现在是时候开启消息确认机制,该参数设置为true,并且工作进程处理完消息后发送确认消息。)

5

exclusive

false

排他消费者,即这个队列只能由一个消费者消费.适用于任务不允许进行并发处理的情况下.比如系统对接

6

nowait

false

不返回执行结果,但是如果排他开启的话,则必须需要等待结果的,如果两个一起开就会报错

7

callback

null

回调函数

8

ticket

null

9

arguments

null

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不同数据库select语句显示前N行数据比对

不同数据SQL对比 有时候我们只想查看一下表的数据的前几行数据,如果不加限制条件的话,默认会查询整个表的数据,等待时间比较久。下面是不同数据库select语句显示前N行数据比对: SQL Server select top 10 * from table_name;D…

hdu2648 Shopping-map容器

Problem Description Every girl likes shopping,so does dandelion.Now she finds the shop is increasing the price every day because the Spring Festival is coming .She is fond of a shop which is called “memory”. Now she wants to know the rank of this shop’s…

你可能需要了解一下的中台

【中台学习】| 作者 / Edison Zhou这是恰童鞋骚年的第201篇原创文章在数字化转型热潮下,各家企业都想建设中台,那么中台是怎么发展起来的?有哪些类型的中台?中台到底是个啥?本文为你一一解答这些问题。1学习背景与前言…

cma检测_CMA检测方法

1、铰页位置偏移检测方法:以铰页轴为基准,用钢直尺测量C1、用有游标卡尺测量C2合格要求:前后,e≤0.2mm;上下或左右,e≤1mm2、门扇中心至门框下门槛尺寸检测方法:在门扇与门框装配好后,准确划好门扇中心线,用钢尺测量C3合格标准:H≤2000,一等,1.0mm二等,1.5mm三等,2.0mmH&#x…

github运行不流畅问题

快速流畅访问Github工具 下载链接如下: 链接:https://pan.baidu.com/s/1RwdrNK__Vx-AEuUr8sM6pg 提取码:a0tw –来自百度网盘超级会员V3的分享 下载后解压,双击运行.exe文件 运行后长这样,给它丢一边不管就行了。

strcmp()字符串比较函数

字符串比较函数strcmp的比较,两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止。 基本形式为strcmp(str1,str2), 若str1str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数;

实现option上下移动_js: 实现Select的option上下移动 | 学步园

function UpOrDown(direct, selectId) {//direct : 1:Up, -1:Downvar obj document.getElementById(selectId);var len obj.length;var index obj.selectedIndex;//如果&#xff1a;1.没有选中的项; 2.向上&#xff0c;但已是最上; 3.向下&#xff0c;但是最下&#xff0c;不…

聊聊微信的Dark模式

大家好&#xff0c;我是Z哥。这周微信公布了一个我期待已久的好消息。周一的时候对外公布说&#xff0c;已经完成了iOS版本的Dark模式开发&#xff0c;可能会在下一个版本上线。▲截图来源于微博&#xff0c;版权归原作者所有真的是千呼万唤使出来&#xff0c;很多人期待这个功…

chrome浏览器快速访问stackoverflow

原因&#xff1a;国内网非常多的网站都使用免费的 Google CDN 服务来加载某些 js、字体样式库以提升网页浏览体验&#xff0c;例如 jQuery、Google Fonts。但是目前 Google 的大多数网站在大陆无法正常访问&#xff0c;因此这些本身是加快网页载入的库反而成为了阻塞网站加载的…

字符串哈希-BKDRHash

代码如下&#xff1a; #include <iostream> #include <vector> using namespace std; const int N 10005;struct node {char name[35]; };unsigned int BKDRHash(char *str) {unsigned int key 0, seed 31;while (*str) {key key * seed (*str);}return key …

linux程序已经在后台运行冻结了_Linux 让程序在后台执行

有些程序我们在打开时&#xff0c;会一直占用我们的终端&#xff0c;而且终端还不能关掉&#xff0c;所以这时候我们就需要让程序在后台运行。1.命令&#xff1a;nohupnohup python -u run.py > run.log 2>&1 &参数说明&#xff1a; run.py: 你需要后台运行的程序…

【开源要闻】Canonical发布新OpenStack工具、Kubernetes访客引导方法

Canonical发布支持CephFS的OpenStack Charms 20.02Canonical近日宣布了OpenStack Charms 20.02的全面上市&#xff0c;这是用于在Ubuntu上设计&#xff0c;构建和管理OpenStack私有云的强大工具的主要版本。OpenStack Charms 20.02是一个令人兴奋的版本&#xff0c;它增加了主要…

开窗函数(1)-部门工资前三员工

已知表 题目 公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的 高收入者 是指一个员工的工资在该部门的 不同 工资中 排名前三 。 编写一个SQL查询&#xff0c;找出每个部门中 收入高的员工 。 以 任意顺序 返回结果表。 示例 参考答案 selectbase.Departmen…

poj2182 Lost Cows-暴力

Description N (2 < N < 8,000) cows have unique brands in the range 1…N. In a spectacular display of poor judgment, they visited the neighborhood ‘watering hole’ and drank a few too many beers before dinner. When it was time to line up for their ev…

用来表示python代码块的是什么_三分钟带你用简单的Python代码深入理解Python中的元类...

互联网的数据爆炸式的增长&#xff0c;而利用 Python 爬虫我们可以获取大量有价值的数据类也是对象在理解元类前&#xff0c;需要先掌握Python中的类。在大多数编程语言中&#xff0c;类就是一组描述如何生成对象的代码段。在Python中这一点仍然成立&#xff1a;但是&#xff0…

Asp.Net Core 中IdentityServer4 授权中心之自定义授权模式

一、前言上一篇我分享了一篇关于 Asp.Net Core 中IdentityServer4 授权中心之应用实战的文章&#xff0c;其中有不少博友给我提了问题&#xff0c;其中有一个博友问我的一个场景&#xff0c;我给他解答的还不够完美&#xff0c;之后我经过自己的学习查阅并阅读了相关源代码&…

缺失值处理

处理思路 在数据预处理过程中&#xff0c;难免会有数据的确实情况&#xff0c;无论是自己爬虫获取的还是从公开数据源上获取的数据集&#xff0c;都不能保证数据集是完全准确的&#xff0c;难免会有一些缺失值。而以这样数据集为基础进行建模或者数据分析时&#xff0c;缺失值…

2019年第十届蓝桥杯国赛B组试题B-质数拆分-01背包问题+素数筛选

问题描述】 2019可以被分解成若干个两两不同的素数&#xff0c;请问不同的分解方案有多少种&#xff1f; 注意&#xff1a;分解方案不考虑顺序&#xff0c;如 2 2017 2019 和 2017 2 2019 属于同一种方案。答案&#xff1a;55965365465060 代码如下&#xff1a; #includ…

在线教育,异军突起,有一种华丽转身,叫做.NET在线讲师!(全职/兼职皆可)...

在线教育2020年&#xff0c;注定是不平凡的一年&#xff0c;疫情来袭&#xff0c;人们只能潜伏在家&#xff0c;很多人因此没有了收入甚至没有了工作&#xff0c;各个行业&#xff0c;也正在快速升级和重新洗牌&#xff0c;这其中&#xff0c;有一个行业&#xff0c;异军突起&a…

python计算相关系数

皮尔逊相关系数 用numpy实现 import numpy as npx np.array([1, 4, 3, 5]) y np.array([1, 3, 4, 5]) pc np.corrcoef(x, y)print(pc)输出结果&#xff1a; 调用scipy.stats中的pearsonr方法 from scipy.stats import pearsonr import numpy as npx np.array([1, 4, 3,…