## exchange - 交换机
~~~
use \api\Rmq;
// @param:交换机名称
// @param:是否创建为延迟交换机,默认:FALSE
// @param:交换机类型,默认:direct
// @param:当交换机不存在时不自动创建,默认:FALSE
// @param:持久化,默认:TRUE
// @param:连接断开后自动删除交换机,默认:FALSE
$Rmq = Rmq::exchange('exchange');
~~~
<br/>
## queue - 队列
~~~
use \api\Rmq;
// @param:队列名称
// @param:是否创建为延迟队列
// @param:当队列不存在时不自动创建,默认:FALSE
// @param:持久化,默认:TRUE
// @param:队列允许其他通道消费,默认:FALSE
// @param:队列执行完毕后自动删除,默认:FALSE
Rmq::queue('queue');
~~~
<br/>
## bind - 将队列绑定到交换机
~~~
use \api\Rmq;
// @param:路由,默认:空
Rmq::bind();
~~~
<br/>
## add - 添加队列
~~~
// 如果第二个参数是FALSE(不是批量写入的情况下),到此就已经将数据写入到队列
// @param:写入的内容,字符串或者数组格式
// @param:是否批量写入,默认:FALSE
// @param:延迟写入,默认:FALSE,如果需要延迟,则单位为秒
$Rmq->add([
'txt' => 'content'
]);
~~~
<br/>
## public - 执行批量写入队列
~~~
for ($i = 1; $i < 1001; $i++)
$Rmq->add([
'txt' => $i
], TRUE);
// 批量写入
$Rmq->publish();
~~~
<br/>
## consume - 消费队列
~~~
use \api\Rmq;
// @param:消费回调,在此处理自己的业务,默认会传递一个$msg参数,里面包含该条队列的详细信息
// @param:自动应答,默认:FALSE
// @param:标签,默认:""
$Rmq->consume(function($msg){
// 手动应答,告诉rabbitmq已经处理了该条队列
// 如果第二个参数为TRUE,则此行代码可以不写
Rmq::ack($msg);
echo $msg->body;
});
~~~
<br/>
## get - 读取单条队列
~~~
$msg = $Rmq->get();
~~~
---
<br/>
**完整示例**
<br/>
#### 普通队列写入
~~~
use \api\Rmq;
// 绑定交换机和队列
rmq('demo', 'demo_queue')->add([
'txt' => 'content'
]);
// 在项目配置文件 Rmq.php中可以配置默认的交换机和队列,采用默认配置可以使用以下更加简化的写法
rmq()->add([
'txt' => 'content'
]);
~~~
<br/>
#### 批量写入队列
~~~
// 添加队列时指定第二个参数为TRUE,表示批量写入
$rmq = rmq();
$rmq->add([
'txt' => 'content'
], TRUE);
$rmq->publish();
~~~
<br/>
#### 延迟写入队列
>延迟队列使用场景:
>
>新用户使用1天这种功能,可以在开通后写入一个延迟1天的队列,1天后消费端消费到这条队列,把该用户的授权信息删除
~~~
use \api\Rmq;
// 创建交互机时指定第二个参数为TRUE,表示是延迟交换机
$Rmq = Rmq::exchange(
'delayed',
TRUE
)->queue('demo_queue')->bind();
// 指定第三个参数为具体的延迟秒数
$Rmq->add([
'txt' => 'content'
], FALSE, 3600);
~~~
<br/>
#### 普通消费
~~~
rmq()->consume(function($msg){
// 写入队列的数据
$data = json_decode($msg->body, TRUE);
});
~~~
<br/>
#### 消费后自动应答
~~~
rmq()->consume(function($msg){
// 写入队列的数据
$data = json_decode($msg->body, TRUE);
}, TRUE);
~~~