docplanner/tasks-bundle

此包已被废弃,不再维护。没有推荐替代包。

基于RabbitMQ的任务包

安装: 483

依赖: 0

建议者: 0

安全性: 0

星标: 0

关注者: 5

分支: 1

开放问题: 1

类型:symfony-bundle

v1.0.0 2017-01-27 17:13 UTC

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以获取更多信息