当前位置: 首页 > 工具软件 > Resque > 使用案例 >

php resque demo,php-resque (三) —— 简单使用

秦宏盛
2023-12-01

队列有3个角色,运行php-resque只需要创建3个相应的脚本即可。

Job | 任务 : 一个Job就是一个需要在后台完成的任务,

Queue | 队列 : 也就是上文的消息队列,在Resque中,队列则是由Redis实现的。Resque还提供了一个简单的队列管理器,可以实现将Job插入/取出队列等功能。

Worker | 执行者 : 负责从队列中取出Job并执行,可以以守护进程的方式运行在后台。

进入php-resque目录下的demo目录下创建一下脚本

1、job

# my_job.php

class My_Job {

public function perform() {

sleep(10);

fwrite(STDOUT, 'Hello!');

}

}

1

2

3

4

5

6

7

# my_job.php

classMy_Job{

publicfunctionperform(){

sleep(10);

fwrite(STDOUT,'Hello!');

}

}

创建一个my_job.php。这个是一个任务。方法perform为必须存在,队列执行时候会自动调用这个方法。

2、queue

# my_queue.php

if(empty($argv[1])) {

die('Specify the name of a job to add. e.g, php queue.php PHP_Job');

}

require __DIR__ . '/init.php';

date_default_timezone_set('GMT');

Resque::setBackend('127.0.0.1:6379');

$args = array(

'time' => time(),

'array' => array(

'test' => 'test',

),

);

$jobId = Resque::enqueue('default', $argv[1], $args, true);

echo "Queued job ".$jobId."\n\n";

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# my_queue.php

if(empty($argv[1])){

die('Specify the name of a job to add. e.g, php queue.php PHP_Job');

}

require__DIR__.'/init.php';

date_default_timezone_set('GMT');

Resque::setBackend('127.0.0.1:6379');

$args=array(

'time'=>time(),

'array'=>array(

'test'=>'test',

),

);

$jobId=Resque::enqueue('default',$argv[1],$args,true);

echo"Queued job ".$jobId."\n\n";

创建my_queue.php。这是一个队列,主要作用是将任务插入队列(redis)。

3、work

date_default_timezone_set('GMT');

require 'my_job.php';

require '../bin/resque';

1

2

3

date_default_timezone_set('GMT');

require'my_job.php';

require'../bin/resque';

创建my_work.php。这是个任务执行者。负责执行任务。

执行:

# 将任务插入队列

[root@localhost demo]# php my_queue.php My_Job

# 返回的是队列ID号

Queued job f53bea6d5423b8eb4a6d8b2f1b45640d

# 可以通过这个id查询执行状况

[root@localhost demo]# php check_status.php f53bea6d5423b8eb4a6d8b2f1b45640d

Tracking status of f53bea6d5423b8eb4a6d8b2f1b45640d. Press [break] to stop.

Status of f53bea6d5423b8eb4a6d8b2f1b45640d is: 1

# Resque_Job_Status::STATUS_WAITING = 1; (等待)

# Resque_Job_Status::STATUS_RUNNING = 2; (正在执行)

# Resque_Job_Status::STATUS_FAILED = 3; (失败)

# Resque_Job_Status::STATUS_COMPLETE = 4; (结束)

# 执行队列

[root@localhost demo]# QUEUE=* php my_work.php

# 输出的日志

#!/usr/bin/env php

[notice] Starting worker localhost.localdomain:1939:*

[notice] Starting work on (Job{default} | ID: faf32b68566a44495054f5bf131b27b2 | My_Job | [{"time":1409643855,"array":{"test":"test"}}])

/******执行输出脚本内容*****/

Hello!

/******执行输出脚本内容*****/

[notice] (Job{default} | ID: faf32b68566a44495054f5bf131b27b2 | My_Job | [{"time":1409643855,"array":{"test":"test"}}]) has finished

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

# 将任务插入队列

[root@localhostdemo]# php my_queue.php My_Job

# 返回的是队列ID号

Queuedjobf53bea6d5423b8eb4a6d8b2f1b45640d

# 可以通过这个id查询执行状况

[root@localhostdemo]# php check_status.php f53bea6d5423b8eb4a6d8b2f1b45640d

Trackingstatusoff53bea6d5423b8eb4a6d8b2f1b45640d.Press[break]tostop.

Statusoff53bea6d5423b8eb4a6d8b2f1b45640dis:1

# Resque_Job_Status::STATUS_WAITING = 1; (等待)

# Resque_Job_Status::STATUS_RUNNING = 2; (正在执行)

# Resque_Job_Status::STATUS_FAILED = 3; (失败)

# Resque_Job_Status::STATUS_COMPLETE = 4; (结束)

# 执行队列

[root@localhostdemo]# QUEUE=* php my_work.php

# 输出的日志

#!/usr/bin/env php

[notice]Startingworkerlocalhost.localdomain:1939:*

[notice]Startingworkon(Job{default}|ID:faf32b68566a44495054f5bf131b27b2|My_Job|[{"time":1409643855,"array":{"test":"test"}}])

/******执行输出脚本内容*****/

Hello!

/******执行输出脚本内容*****/

[notice](Job{default}|ID:faf32b68566a44495054f5bf131b27b2|My_Job|[{"time":1409643855,"array":{"test":"test"}}])hasfinished

参考:

 类似资料: