<h1 align="center">Playcat Queue</h1>
<p align="center">php消息隊列服務</p>
Redis單機(已完成)
Redis集群(已完成)
Kafka(todo)
更多。。。
本項目基于webman,所以請先安裝好webman在執(zhí)行下面操作。
$ composer require "playcat/queue"
使用redis單機(默認)
修改config\plugin\playcat\queue\redis.php為自己redis的配置即可
使用redis集群機
修改config\plugin\playcat\queue\manager.php里的driver為如下內容
'driver' => \Playcat\Queue\Driver\Rediscluster::class,
修改config\plugin\playcat\queue\rediscluster.php為自己redis的配置即可
<?php
namespace app\queue\playcat;
use Playcat\Queue\Model\Payload;
use Playcat\Queue\Protocols\Consumer;
class Test implements Consumer
{
//任務名稱
public $queue = 'test';
public function consume(Payload $payload)
{
//獲取自定義傳入的內容
$data = $payload->getQueueData();
...
}
}
app/queue/playcat/'目錄下。如果目錄不存在就創(chuàng)建它(==可以編輯config/plugin/playcat/queue/process.php中的consumer_dir的地址來改變==)
$ php start.php start
use Playcat\Queue\Manager;
use Playcat\Queue\Model\Payload;
$payload = new Payload();
//對應消費隊列里的任務名稱
$payload->setChannel('test');
//對應消費隊列里的任務使用的數據
$payload->setQueueData([1,2,3,4]);
//創(chuàng)建一個立即執(zhí)行的任務
Manager::getInstance()->push($payload);
$payload_delay = new Payload();
//對應消費隊列里的任務名稱
$payload_delay->setChannel('test');
//對應消費隊列里的任務使用的數據
$payload_delay->setQueueData([6,7,8,9]);
//設置60秒后執(zhí)行的任務
$payload_delay->setDelayTime(60);
Manager::getInstance()->push($payload_delay);`
任務在執(zhí)行過程中未拋出異常則默認執(zhí)行成功,否則則進入重試階段.
重試次數和時間由配置控制,重試間隔時間為當前重試次數的冪函數。
Playcat\Queue\Exceptions\DontRetry異常會忽略掉重試
MIT
大神,能不能把重試和失敗的場景寫下例子不?