bernardosecades/queue-system-bundle

队列系统包 - 任务和工作者

安装: 26

依赖: 0

建议者: 0

安全: 0

星级: 0

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

dev-master 2016-10-22 15:15 UTC

This package is not auto-updated.

Last update: 2024-09-18 19:39:00 UTC


README

基于Redis的简单队列系统

安装/配置

版本

  • 使用dev-master的别名安装最新版本。

安装

wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make

安装包

您需要在composer.json文件中添加依赖行

"require": {
    ...
    "bernardosecades/queue-system-bundle": "dev-master"
},

然后使用composer更新您的项目依赖项

php composer.phar update

并在AppKernel.php文件中注册包

return array(
    // ...
    new BernardoSecades\QueueSystemBundle\QueueSystemBundle(),
    // ...
);

配置

在当前版本中,所有连接都是localhost:6379,但将尽快支持可配置的连接,同样适用于事件。您需要配置所有。默认情况下,jms serializer的值为'Json'。在下一个版本中,您可以实现自定义序列化器。

queue_system:
    # Queues definition
    queues:
        images: "queue:mail"
        api: "queue:api"

    # Server configuration. By default, these values
    server:
        redis:
            host: 127.0.0.1
            port: 6379
            database: ~

任务和队列

在config.yml中定义的每个队列都会创建一个队列服务,例如,如果您定义了队列'queue:api',您可以通过$this->getContainer()->get('queue_system.queue_api')访问队列,示例

生产者

...
use BernardoSecades\QueueSystemBundle\Job\MessageDataJob;
...

/** @var \BernardoSecades\QueueSystemBundle\Queue\Queue $queue */
$queue = $this->getContainer()->get('queue_system.queue_api');

$message = new MessageDataJob('queue_system.api_job', ['user_id' => 13567]);

$queue->enqueue($message);

在这个例子中,您应该创建一个继承自BernardoSecades\QueueSystemBundle\Job\JobAbstract的API作业服务,您需要实现handle()getDicName()方法,MessageDataJob对象的第一个参数是您自定义作业的服务名称。

class ApiJob extends JobAbstract
{
    /**
     * Name service in your dependency injection container
     *
     * {@inheritdoc}
     */
    public function getDicName()
    {
        return 'queue_system.api_job';
    }

    /**
     * {@inheritdoc}
     */
    public function handle()
    {
        $arguments = $this->getArguments();
        syslog(0, sprintf('Executing method handle with argument user_id: %d', $arguments['user_id']));
        ...
        // do more things
    }
}

工作者

此包包含一个工作者命令,用于从Redis中保存的队列中消费作业。

从队列queue:api中消费作业的示例,您应执行以下命令

./app/console queue-system:worker queue:api

该命令具有以下选项

  • --worker-max-jobs=WORKER-MAX-JOBS 要处理的作业数量 [默认: 0]
  • --worker-tries-process-job=WORKER-TRIES-PROCESS-JOB 处理作业的重试次数 [默认: 0]
  • --worker-max-memory=WORKER-MAX-MEMORY 内存限制(MB) [默认: 0]
  • --worker-sleep=WORKER-SLEEP 此外,您还可以指定在轮询新作业之前等待的秒数:[默认: 0]

待办事项

  • 更多测试
  • 包含事件分发器。
  • 包含工作者命令中的日志系统。
  • 自定义序列化器。
  • 修复代码风格以与symfony风格兼容。
  • 包含外部服务以检查代码质量并修复可能的问题。
  • 改进文档,并包括如何将工作者设置为supervisord的示例。