PHP版—RabbitMQ各方法详解

猿掌柜
2021-04-19 / 0 评论 / 59 阅读 / 正在检测是否收录...

exchange_declare($exchange, $type, $passive = false, $durable = false, $auto_delete = true, $internal = false, $nowait = false, $arguments = array(), $ticket = null)

试探性申请一个交换器,若该交换器不存在,则创建;若存在,则跳过

序号参数名默认值解释
1$exchange 交换器名称。
2$type 交换器类型,常见的如fanout、direct、topic、headers四种。
3$passivefalse只判断不创建(一般用于判断该交换机是否存在),如果你希望查询交换机是否存在.而又不想在查询时创建这个交换机.设置此为true即可如果交换机不存在,则会抛出一个错误的异常.如果存在则返回NULL。
4$durablefalse设置是否持久化。设置true表示持久化,反之非持久化。持久化可以将交换器存盘,在服务器重启的时候不会丢失相关信息。
5$auto_deletetrue设置是否自动删除。设置true表示自动删除。自动删除的前提:至少有一个队列或交换器与这个交换器绑定,之后所有与这个交换器绑定的队列或交换器都与此解绑。不要错误的理解:“当与此交换器连接的客户端都断开时,RabbitMQ会自动删除本交换器”。
6$internalfalse设置是否是内置的。设置true表示是内置的交换器,客户端程序无法直接发送消息到这个交换器中,只能通过交换器路由到交换器这个方式。
7$nowaitfalse如果为true则表示不等待服务器回执信息.函数将返回NULL,可以提高访问速度。
8$argumentsarray()其他一些结构化参数。
9$ticketnull 

queue_declare($queue = '', $passive = false, $durable = false, $exclusive = false, $auto_delete = true, $nowait = false, $arguments = array(), $ticket = null)

试探性申请一个交换器,若该交换器不存在,则创建;若存在,则跳过。

序号参数名默认值解释
1$queue 队列名称。
2$passivefalse只判断不创建(一般用于判断该队列是否存在),如果你希望查询队列是否存在,而又不想在查询时创建这个队列,设置此为true即可;如果队列不存在,则会抛出一个错误的异常,如果存在则返回NULL。
3$durable    false设置是否持久化。设置true表示持久化,反之非持久化。持久化的队列可以存盘,在服务器重启的时候不会丢失相关信息。
4$exclusive    false设置是否排他。设置true时,表示为排他队列,该队列仅对首次首次声明它的连接可见,并在连接断开时自动删除。注意三点:排他队列是基于连接(Connection)可见的,同一个连接的不同信道(Channel)是可以同时访问同一连接创建的排他队列;“首次”是指如果同一个连接已经声明了一个排他队列,其他连接时不允许建立同名排他队列的,这个与普通队列不同;即使该队列是持久化的,一旦连接关闭或客户端退出,该排他队列都会自动删除,这种队列适合一个客户端同时发送和读取消息的场景。
5$auto_deletetrue设置是否自动删除。设置true表示队列自动删除。自动删除的前提:至少一个消费者连接到这个队列,之后所有与这个队列连接的消费者都断开时,才会自动删除。不要错误的理解:“当连接到此队列的所有客户端断开时,这个队列自动删除”,因为生产者客户端创建这个队列,或没有消费者客户端与这个队列连接时,都不会自动删除这个队列。
6$nowaitfalse如果为true则表示不等待服务器回执信息.函数将返回NULL,可以提高访问速度。
7$argumentsarray()其他一些结构化参数。$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$ticketnull 

queue_bind($queue, $exchange, $routing_key = '', $nowait = false, $arguments = array(), $ticket = null)。

将队列和交换器绑定

序号参数名默认值解释
1$queue 队列名称。
2$exchange 交换器名称。
3$routing_key用来绑定队列和交换器的路由键
4$nowait false如果为true则表示不等待服务器回执信息.函数将返回NULL,可以提高访问速度。
5$arguments array()定义绑定的一些参数
6$ticket null 

exchange_bind($destination, $source, $routing_key = '', $nowait = false, $arguments = array(), $ticket = null)。

交换器与交换器绑定。

序号参数名默认值解释
1$destination 目标交换器(某种程度上可以看成一个队列)。
2$source 源交换器(消息从source交换器到destination交换器)。
3$routing_key用来绑定队列和交换器的路由键
4$nowait false如果为true则表示不等待服务器回执信息.函数将返回NULL,可以提高访问速度。
5$arguments array()定义绑定的一些参数
6$ticket null 

basic_publish($msg, $exchange = '', $routing_key = '', $mandatory = false, $immediate = false, $ticket = null)

生产消息

序号参数名默认值解释
1$msg 生产的消息
2$exchange 交换器的名称,指明消息需要发送到哪个交换器中。如果设置为空字符串,则消息会被发送到RabbitMQ默认的交换器中。
3$routing_key 路由键。交换器根据路由键将消息储存到相应的队列之中。
4$mandatoryfalse设置为true时,交换器无法根据自身的类型和路由键找到一个符合条件额队列,那么RabbitMQ会调用Basic.Return命令将消息返回给生产者。当设置为false的时,出现上述问题,则消息直接被丢弃。
5$immediate fasleRabbitMQ3.0版本开始去掉对immediate参数的支持。
6$ticket null 

basic_consume($queue = '', $consumer_tag = '', $no_local = false, $no_ack = false, $exclusive = false, $nowait = false, $callback = null, $ticket = null, $arguments = array())

消费消息

序号参数名默认值解释
1$queue 队列名称。
2$consumer_tag 消费者标签。用来区分多个消费者。
3$no_localfalseAMQP的标准,但rabbitMQ并没有做实现。
4$no_ackfalse收到消息后,是否不需要回复确认即被认为被消费;设置为true,表示自动应答;设置为false表示手动应答。
5$exclusivefalse设置是否排他。排他消费者,即这个队列只能由一个消费者消费.适用于任务不允许进行并发处理的情况。
6$nowaitfalse如果为true则表示不等待服务器回执信息.函数将返回NULL,但若排他开启的话,则必须需要等待结果的,如果两个一起开就会报错。
7$callbacknullcallback函数
8$arguments array()一些额外配置

.

1

评论

博主关闭了当前页面的评论