## 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);
~~~