队列
Drupal Queue API 允许把一系列任务预先放到一个队列中,稍后再一一处理,系统会通过一个策略来尝试保证, 队列中的单个任务在同时刻只被单一的消费客户端消费。
-
Drupal\Core\Queue\QueueInterface::createQueue()
创建一个新的队列。 -
Drupal\Core\Queue\QueueInterface::createItem()
为一个队列添加任务项。 -
Drupal\Core\Queue\QueueInterface::claimItem($lease_time = 3600)
取得一个任务在一定时间内的处理权。 -
Drupal\Core\Queue\QueueInterface::deleteItem()
任务处理完成后删除任务项。 -
Drupal\Core\Queue\QueueInterface::releaseItem()
任务无法处理,释放任务项。
队列分为两种实现:可靠队列
和 非可靠队列
。
前者会保证入列消息的处理顺序,每个消息至少被处理一次。
后者只会尽最大努力,但不能保证。
Drupal core 对应的默认实现分别是 DatabaseQueue
和 Memory
。
可以在 setting.php
文件中配置指定的队列名称所使用的队列实现服务。
-
queue_reliable_service_$name
: The container service to use for the reliable queue $name. -
queue_service_$name
: The container service to use for the queue $name. -
queue_default
: The container service to use by default for queues without overrides. This defaults to 'queue.database'.
假如打算创建一个名为 my_queue
的队列,可以有如下配置:
$settings['queue_reliable_service_my_queue'] = 'queue.database';
$settings['queue_service_my_queue'] = 'queue.memory';
$settings['queue_default'] = 'queue.database';
Drupal::queue('my_queue', true);
将使用 queue.database
实现,
Drupal::queue('my_queue', false);
将使用 queue.memory
实现。
任何其他名字,如 Drupal::queue('xxx');
,都将会默认使用 queue.database
实现。
Advanced Queue
登录后查看完整内容