docplanner / tasks-bundle
此包已被废弃,不再维护。没有推荐替代包。
基于RabbitMQ的任务包
v1.0.0
2017-01-27 17:13 UTC
Requires
- php-amqplib/rabbitmq-bundle: 1.12.*
This package is not auto-updated.
Last update: 2023-07-31 09:48:45 UTC
README
要求
RabbitMQ
启用了rabbitmq_delayed_message_exchange
插件
安装
Composer
composer require docplanner/tasks-bundle
添加到AppKernel
new \OldSound\RabbitMqBundle\OldSoundRabbitMqBundle, new DocPlanner\TasksBundle\DocPlannerTasksBundle,
配置
在OldSoundRabbitMqBundle
配置中定义连接
https://github.com/php-amqplib/RabbitMqBundle
old_sound_rabbit_mq: connections: default: host: "%rabbit.host%" port: "%rabbit.port%" user: "%rabbit.user%" password: "%rabbit.password%" vhost: "%rabbit.vhost%" lazy: false connection_timeout: 3 read_write_timeout: 3 keepalive: false heartbeat: 0
定义任务配置
docplanner_tasks: connection_name: default names_prefix: asd_
定义任务
定义任务负载
您必须扩展类DocPlanner\TasksBundle\Tasks\BaseTaskPayload
,整个对象将使用serialize
函数进行序列化。
定义作业
您必须扩展类DocPlanner\TasksBundle\Tasks\BaseTask
,方法execute
包含作业体,方法supports
检查给定的负载是否由任务支持。您必须将任务服务标记为docplanner_tasks.task
。
警告
如果方法execute
返回true
,则表示任务执行成功,false
将导致给定任务的重新排队。重新排队次数由任务类中定义的次数限制。如果负载重新排队次数超过重新排队限制,任务将被移动到埋葬队列。
示例
class SamplePayload extends BaseTaskPayload { protected $someValue; public function __construct(string $someValue) { $this->someValue = $someValue; } public function getSomeValue() : string { return $this->someValue; } }
class SampleTask extends BaseTask { /** * @var SamplePayload $payload */ protected function execute(BaseTaskPayload $payload): bool { file_put_contents('/tmp/payload.log', var_export($payload, true) . PHP_EOL . $payload->getSomeValue()); return true; } public function supports(BaseTaskPayload $payload): bool { return $payload instanceof SamplePayload; } }
sample_task: class: Your\Namespace\SampleTask tags: - { name: docplanner_tasks.task }
生成任务
无延迟
$taskProducer = $container->get('docplanner_tasks.task_producer'); $taskProducer->enqueue(new SamplePayload());
有延迟
$taskProducer = $container->get('docplanner_tasks.task_producer'); $dateTime = new \DateTime('now + 2 minutes'); $taskProducer->enqueue(new SamplePayload(), $dateTime);
消费任务
bin/console docplanner:tasks:run
查看--help
以获取更多信息