bernardosecades / queue-system-bundle
队列系统包 - 任务和工作者
dev-master
2016-10-22 15:15 UTC
Requires
- php: ^5.5.9|~7.0
- jms/serializer-bundle: ^1.0
- psr/log: ^1.0
- symfony/config: ~2.3|~3.0
- symfony/framework-bundle: ^2.7|^3.0
Requires (Dev)
- bernardosecades/php-quality-tools: ^1.0
- phpunit/phpunit: ^5.6
Suggests
- jms/serializer-bundle: Add support for advanced serialization capabilities, recommended, requires ^1.0
- sensio/framework-extra-bundle: Add support for route annotations and the view response listener, requires ^3.0
- symfony/expression-language: Add support for using the expression language in the routing, requires ^2.7|^3.0
- symfony/serializer: Add support for basic serialization capabilities and xml decoding, requires ^2.7|^3.0
- symfony/validator: Add support for validation capabilities in the ParamFetcher, requires ^2.7|^3.0
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的示例。