RabbitMQ 使用

一、常用方法说明
生产者:
1、创建连接:

/**
 * 参数说明
 * $host : RabbitMQ 服务器主机IP地址
 * $post : RabbitMQ服务器端口
 * $user : RabbitMQ服务器的用户名
 * $password : RabbitMQ服务器的密码
 * $vhost : 连接rabbitmq服务器的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、在信道创建交换机

/**
 * $exchange_name 交换机名字
 * $type 交换机类型:
 *       直连交换机:Direct
 *       扇形交换机:Fanout 
 *       主题交换机:Topic 
 *       首部交换机:Headers 
 * $passive  检测exchange是否存在,设为true,若队列存在则命令成功返回(调用其他参数不会影响exchange属性),若不存在不会创建exchange,返回错误。设为false,如果exchange不存在则创建exchange,调用成功返回。如果exchange已经存在,并且匹配现在exchange的话则成功返回,如果不匹配则exchange声明失败
 * $durable 是否持久化
 * $auto_delete 连接断开的时候,exchange是否自动删除
 */
 $channel->exchange_declare($exchange_name,$type,$passive,$durable,$auto_delete);

交换机类型说明:
3.1、扇形交换机:
扇形交换机是最基本的交换机类型,它所能做的事情非常简单———广播消息。扇形交换机会把能接收到的消息全部发送给绑定在自己身上的队列。因为广播不需要“思考”,所以扇形交换机处理消息的速度也是所有的交换机类型里面最快的。
3.2、直连交换机:
直连交换机是一种带路由功能的交换机,一个队列会和一个交换机绑定,除此之外再绑定一个routing_key,当消息被发送的时候,需要指定一个binding_key,这个消息被送达交换机的时候,就会被这个交换机送到指定的队列里面去。同样的一个binding_key也是支持应用到多个队列中的。这样当一个交换机绑定多个队列,就会被送到对应的队列去处理。适用场景:有优先级的任务,根据任务的优先级把消息发送到对应的队列,这样可以指派更多的资源去处理高优先级的队列。
3.3、主题交换机:
发送到主题交换机上的消息需要携带指定规则的routing_key,主题交换机会根据这个规则将数据发送到对应的(多个)队列上。主题交换机的routing_key需要有一定的规则,交换机和队列的binding_key需要采用 .#.… 的格式,每个部分用 . 分开,其中:

  • *表示一个单词
  • #表示任意数量(零个或多个)单词

4、声明队列:

/*
 * $queuename  队列名称
 * $passive   检查queue是否存在
 * $durable 是否开启队列持久化
 * $exclusive 队列是否可悲其他队列访问
 * $auto_delete 通道关闭后,是否自动删除队列 
 */
$channel->queue_declare($queuename,$passive,$durable,$exclusive,$auto_delete);

5、绑定交换机:

/*
 * $queuename 队列名称
 * $exchangename 交换机名称
 * $binding_key 默认为空,表示该交换机对所有消息感兴趣
 */
$channel->queue_bind($queuename,$exchangename,$binding_key);

6、创建要发送的消息:

/*
 * $data string类型,要发送的消息
 * $properties  array类型 设置的属性,比如消息持久化['delivery_mode'=>2]
 */
$msg = new AMQPMessage($data,$properties);

7、创建要发送的消息:

/*
 * $msg 要发送的消息
 * $exchange 交换机名称
 * $routing_key 路由键
 */
$channel->basic_publish($msg,$exchange,$routing_key);

8、关闭信道和连接

$channel->close();
$connection->close();

消费者:
1、消费消息:

/*
 * $aueue  队列名称
 * $consumer_tag 消费者标签,用来区别多个消费者
 * $no_local 设置为true,表示不能将同一个connection中生产者发送的消息传递给这个connection中的消费者
 * $no_ack 是否自动确认消息,收到消息后,是否不需要回复确认即被认为被消费
 * $exclusive 是否排它,即这个队列只能由一个消费者消费.适用于任务不允许进行并发处理的情况下
 * $nowait 不返回执行结果,但是如果排他开启的话,则必须需要等待结果的,如果两个一起开就会报错 
 */
$channel->basic_consume( $queue = '',$consumer_tag = '',$no_local = false,$no_ack = false,$exclusive = false,$nowait = false,$callback = null,);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值