php-amqplib/php-amqplib3.0 RabbitMQ各方法详解(PHP版)

关于下面全部 $ticket 参数变量的说明:一个已经被遗弃的参数用来向前兼容的参数 $ticket 参数变量的说明链接.

exchange_declare

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

/**
 * Declares exchange
 *
 * @param string $exchange
 * @param string $type
 * @param bool $passive
 * @param bool $durable
 * @param bool $auto_delete
 * @param bool $internal
 * @param bool $nowait
 * @param AMQPTable|array $arguments
 * @param int|null $ticket
 * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
 * @return mixed|null
 */
 public function exchange_declare(
     $exchange,
     $type,
     $passive = false,
     $durable = false,
     $auto_delete = true,
     $internal = false,
     $nowait = false,
     $arguments = array(),
     $ticket = null
 )
参数名解释
exchange交换器名称
type交换器类型,常见的如fanout、direct、topic、headers四种。
passive只判断不创建(一般用于判断该交换机是否存在),如果你希望查询交换机是否存在.而又不想在查询时创建这个交换机.设置此为true即可如果交换机不存在,则会抛出一个错误的异常.如果存在则返回NULL。称
durable设置是否持久化。设置true表示持久化,反之非持久化。持久化可以将交换器存盘,在服务器重启的时候不会丢失相关信息。
auto_delete设置是否自动删除。设置true表示自动删除。自动删除的前提:至少有一个队列或交换器与这个交换器绑定,之后所有与这个交换器绑定的队列或交换器都与此解绑。不要错误的理解:“当与此交换器连接的客户端都断开时,RabbitMQ会自动删除本交换器”。
internal设置是否是内置的。设置true表示是内置的交换器,客户端程序无法直接发送消息到这个交换器中,只能通过交换器路由到交换器这个方式。
nowait如果为true则表示不等待服务器回执信息.函数将返回NULL,可以提高访问速度。
arguments其他一些结构化参数
ticket

basic_publish

生产消息

/**
 * Publishes a message
 *
 * @param AMQPMessage $msg
 * @param string $exchange
 * @param string $routing_key
 * @param bool $mandatory
 * @param bool $immediate
 * @param int|null $ticket
 * @throws AMQPChannelClosedException
 * @throws AMQPConnectionClosedException
 * @throws AMQPConnectionBlockedException
 */
public function basic_publish(
    $msg,
    $exchange = '',
    $routing_key = '',
    $mandatory = false,
    $immediate = false,
    $ticket = null
)
参数名解释
msg生产的消息
exchange交换器的名称,指明消息需要发送到哪个交换器中。如果设置为空字符串,则消息会被发送到RabbitMQ默认的交换器中。
routing_key路由键。交换器根据路由键将消息储存到相应的队列之中。
mandatory设置为true时,交换器无法根据自身的类型和路由键找到一个符合条件额队列,那么RabbitMQ会调用Basic.Return命令将消息返回给生产者。当设置为false的时,出现上述问题,则消息直接被丢弃。
immediateRabbitMQ3.0版本开始去掉对immediate参数的支持。
ticket

queue_declare

声明队列 声明队列是幂等的-仅当队列不存在时才创建

/**
 * Declares queue, creates if needed
 *
 * @param string $queue
 * @param bool $passive
 * @param bool $durable
 * @param bool $exclusive
 * @param bool $auto_delete
 * @param bool $nowait
 * @param array|AMQPTable $arguments
 * @param int|null $ticket
 * @return array|null
 *@throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
 */
public function queue_declare(
    $queue = '',
    $passive = false,
    $durable = false,
    $exclusive = false,
    $auto_delete = true,
    $nowait = false,
    $arguments = array(),
    $ticket = null
) 
参数名解释
queue队列名称
passive只判断不创建(一般用于判断该队列是否存在),如果你希望查询队列是否存在,而又不想在查询时创建这个队列,设置此为true即可;如果队列不存在,则会抛出一个错误的异常,如果存在则返回NULL。
durable设置是否持久化。设置true表示持久化,反之非持久化。持久化的队列可以存盘,在服务器重启的时候不会丢失相关信息
exclusive设置是否排他。设置true时,表示为排他队列,该队列仅对首次首次声明它的连接可见,并在连接断开时自动删除。注意三点:排他队列是基于连接(Connection)可见的,同一个连接的不同信道(Channel)是可以同时访问同一连接创建的排他队列;“首次”是指如果同一个连接已经声明了一个排他队列,其他连接时不允许建立同名排他队列的,这个与普通队列不同;即使该队列是持久化的,一旦连接关闭或客户端退出,该排他队列都会自动删除,这种队列适合一个客户端同时发送和读取消息的场景。
auto_delete设置是否自动删除。设置true表示队列自动删除。自动删除的前提:至少一个消费者连接到这个队列,之后所有与这个队列连接的消费者都断开时,才会自动删除。不要错误的理解:“当连接到此队列的所有客户端断开时,这个队列自动删除”,因为生产者客户端创建这个队列,或没有消费者客户端与这个队列连接时,都不会自动删除这个队列。
nowait如果为true则表示不等待服务器回执信息.函数将返回NULL,可以提高访问速度。
arguments其他一些结构化参数。$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

queue_bind

将队列和交换器绑定。

 /**
  * Binds queue to an exchange
  *
  * @param string $queue
  * @param string $exchange
  * @param string $routing_key
  * @param bool $nowait
  * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
  * @param int|null $ticket
  * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
  * @return mixed|null
  */
 public function queue_bind(
     $queue,
     $exchange,
     $routing_key = '',
     $nowait = false,
     $arguments = array(),
     $ticket = null
 )
参数名解释
queue队列名称
exchange交换器名称
routing_key用来绑定队列和交换器的路由键
nowait如果为true则表示不等待服务器回执信息.函数将返回NULL,可以提高访问速度。
arguments定义绑定的一些参数
ticket

exchange_bind

交换器与交换器绑定

/**
 * Binds dest exchange to source exchange
 *
 * @param string $destination
 * @param string $source
 * @param string $routing_key
 * @param bool $nowait
 * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
 * @param int|null $ticket
 * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
 * @return mixed|null
 */
public function exchange_bind(
    $destination,
    $source,
    $routing_key = '',
    $nowait = false,
    $arguments = array(),
    $ticket = null
) 
参数名解释
destination目标交换器(某种程度上可以看成一个队列)
source源交换器(消息从source交换器到destination交换器)
routing_key用来绑定队列和交换器的路由键
nowait用来绑定队列和交换器的路由键
arguments定义绑定的一些参数
ticket

basic_consume

消费消息

/**
 * Start a queue consumer.
 * This method asks the server to start a "consumer", which is a transient request for messages
 * from a specific queue.
 * Consumers last as long as the channel they were declared on, or until the client cancels them.
 *
 * @link https://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.consume
 *
 * @param string $queue
 * @param string $consumer_tag
 * @param bool $no_local
 * @param bool $no_ack
 * @param bool $exclusive
 * @param bool $nowait
 * @param callable|null $callback
 * @param int|null $ticket
 * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
 *
 * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
 * @throws \InvalidArgumentException
 * @return string
 */
public function basic_consume(
    $queue = '',
    $consumer_tag = '',
    $no_local = false,
    $no_ack = false,
    $exclusive = false,
    $nowait = false,
    $callback = null,
    $ticket = null,
    $arguments = array()
)
参数名解释
queue队列名称
consumer_tag消费者标签。用来区分多个消费者
no_localAMQP的标准,但rabbitMQ并没有做实现
no_ack收到消息后,是否不需要回复确认即被认为被消费;设置为true,表示自动应答;设置为false表示手动应答
exclusive设置是否排他。排他消费者,即这个队列只能由一个消费者消费.适用于任务不允许进行并发处理的情况
nowait如果为true则表示不等待服务器回执信息.函数将返回NULL,但若排他开启的话,则必须需要等待结果的,如果两个一起开就会报错
callbackcallback函数
ticket
arguments一些额外配置
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值