Drupal 7 Advanced queue

主标签

投票加载中...
标签: 
Drupal 7 Advanced queue

Advanced queue 扩展了系统的Queue模块,主要的功能是可以后台执行,异步执行(Drush的方式去执行)

使用场景:

当用户在前台点击某个事件或者你需要去触发一个很大的动作,而这个动作你不想立即执行,因为这个执行会让用户等待很久,这种情况就可以将任务丢到队列中. 使用此模块后台监听执行

 

模块案例: 

定义队列

 /**
 * 定义任务.
 *
 * Implements hook_advanced_queue_info().
 */
function mymodule_advanced_queue_info() {
  $queues['advancedqueue_send_mail_job'] = array(
    'lable' => 'Send mail job',
    'worker callback' => 'advancedqueue_send_mail_job_worker',
    'groups' => array(
      'example',
    ),
    'max attempts' => 5, // 失败后最多重试次数.
    'retry after' => 10, // 重试等待的秒数, 单位秒
    'lease time' => 45, // 队列数量.
    'delete when completed' => TRUE, // 当完成以后删除.
    'weight' => 10,
    // All queue items normally fire a pre- and post-execute hook. Queues
    // which enable (set to TRUE) this setting avoid this.
    'skip hooks' => FALSE,
  );
  return $queues;
} 

创建队列

 /**
 * 随便写的函数,用于添加任务.
 *
 * Menu callback.
 */
function test_queue() {

  // 创建普通任务,立即执行的任务.
  /*---------------------------------------*/
  // 创建发送邮件的参数.
  $mailobj = array(
    'obj' => '244705779@qq.com',
    'title' => 'Hello world',
    'content' => 'Hello world'
  );
  // 获取job,并且执行添加任务.
  $queue = DrupalQueue::get('advancedqueue_send_mail_job', true); // grab queue
  $queue->createItem($mailobj);
} 

后台监听和执行队列

 /**
 * 任务最终执行函数
 */
function advancedqueue_send_mail_job_worker($item) {
  $myobj = $item->data;
  return array(
    'status' => ADVANCEDQUEUE_STATUS_SUCCESS,
    'result' => 'Processed ' . $item->item_id,
  );
} 

Drush

  1. drush advancedqueue-list 可以查看未执行的队列列表
  2. drush advancedqueue 指定队列名  执行指定的队列
  3. drush advancedqueue --all  执行所有未执行的队列

 

一般使用方法:

 # drush --root=/Users/xiukun/www/mysite advancedqueue --all & > /dev/null 
模块下载: 
文件加载中...