File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11# delayqueue-php
22[ 延迟队列] ( https://github.com/ouqiang/delay-queue ) PHP客户端
33
4- [ ![ Build Status] ( https://travis-ci.org/ouqiang/delayqueue-php.png )] ( https://travis-ci.org/ouqiang/delayqueue-php )
4+ [ ![ Build Status] ( https://travis-ci.org/ouqiang/delayqueue-php.png )] ( https://travis-ci.org/ouqiang/delayqueue-php )
5+
6+ 依赖
7+ --------
8+ * PHP5.4+
9+ * Composer
10+ * ext-pcntl
11+
12+ 安装
13+ ------------
14+ ``` shell
15+ composer require start-point/delayqueue-php
16+ ```
17+
18+ 使用
19+ ------------
20+
21+ ``` php
22+ <?php
23+
24+ use DelayQueue\Job;
25+ use DelayQueue\Util\Time;
26+ use DelayQueue\DelayQueue;
27+
28+ require 'vendor/autoload.php';
29+
30+ $job = new Job();
31+ $job->setTopic('order');
32+ $job->setId('15702398321');
33+ $job->setDelay(1 * Time::MINUTE);
34+ $job->setTtr(20 * Time::SECOND);
35+ $job->setBody([
36+ 'uid' => 10829378,
37+ 'created' => 1498657365,
38+ ]);
39+
40+
41+ $delayQueue = new DelayQueue('http://127.0.0.1:9277');
42+ // 处理Job的类名
43+ $className = 'Demo\\Handler\\OrderHandler';
44+ try {
45+ // 添加一个Job到队列
46+ $delayQueue->push($className, $job);
47+
48+ // 从队列中删除Job
49+ $delayQueue->delete('15702398321');
50+ } catch (Exception $exception) {
51+ echo $exception->getMessage();
52+ }
53+ ````
54+
55+ Job后台处理
56+ ----------
57+ ```shell
58+ php vendor/bin/delayqueue-php -c /path/to/config.ini
59+ ```
60+
61+ 创建Job处理类
62+ ----------
63+
64+ ``` php
65+ <?php
66+
67+ namespace Demo\Handler;
68+
69+ use DelayQueue\Handler\AbstractHandler;
70+
71+ class OrderHandler extends AbstractHandler
72+ {
73+ protected function perform()
74+ {
75+ // 未抛出异常视为成功, Job将会被删除
76+ // Job唯一标识
77+ // $this->id;
78+
79+ // Job自定义内容
80+ // $this->body;
81+ }
82+ }
83+ ```
Original file line number Diff line number Diff line change @@ -16,8 +16,8 @@ if (php_sapi_name() !== 'cli') {
1616 exit (1 );
1717}
1818
19- if (!extension_loaded ('pcntl ' ) || ! extension_loaded ( ' posix ' ) ) {
20- echo 'extension pcntl, posix not loaded ' ;
19+ if (!extension_loaded ('pcntl ' )) {
20+ echo 'extension pcntl not loaded ' ;
2121 exit (1 );
2222}
2323
Original file line number Diff line number Diff line change 1515 "require" : {
1616 "php" : " >= 5.4" ,
1717 "ext-pcntl" : " *" ,
18- "ext-posix" : " *" ,
1918 "monolog/monolog" : " ^1.0" ,
2019 "guzzlehttp/guzzle" : " ^5.0" ,
2120 "psr/container" : " ^1.0"
Original file line number Diff line number Diff line change 33
44namespace DelayQueue \Tests ;
55
6+ use DelayQueue \Container \Container ;
67use DelayQueue \Job ;
78use DelayQueue \DelayQueue ;
89use DelayQueue \Util \Time ;
910use DelayQueue \Handler \AbstractHandler ;
11+ use Monolog \Logger ;
12+ use Monolog \Handler \StreamHandler ;
13+
1014
1115class DelayQueueTest extends \PHPUnit_Framework_TestCase
1216{
@@ -91,7 +95,21 @@ public function testPop(Job $job)
9195 $ this ->assertEquals ($ className , $ data ['className ' ]);
9296 $ this ->assertEquals ($ job ->body , $ data ['body ' ]);
9397 /** @var AbstractHandler $class */
94- $ class = new $ data ['className ' ]();
98+ $ container = new Container ();
99+ $ container ->set ('logger ' , function () {
100+ $ logger = new Logger ('delay-queue ' );
101+ $ logger ->pushHandler (
102+ new StreamHandler (
103+ 'php://stdout ' ,
104+ Logger::INFO ,
105+ true ,
106+ null ,
107+ true )
108+ );
109+
110+ return $ logger ;
111+ });
112+ $ class = new $ data ['className ' ]($ container );
95113 $ class ->setId ($ data ['id ' ]);
96114 $ class ->setBody ($ data ['body ' ]);
97115 $ class ->run ();
You can’t perform that action at this time.
0 commit comments