tavii / sqs-job-queue-bundle
0.2.6
2017-10-16 13:37 UTC
Requires
- php: ~5.6|~7.0
- doctrine/dbal: ~2.3
- doctrine/orm: ~2.3
- symfony/symfony: ~2.3
- tavii/sqs-job-queue: 0.2.*
Requires (Dev)
- phake/phake: 2.0.*@dev
- phpunit/phpcov: *
- phpunit/phpunit: ^5.2
- satooshi/php-coveralls: dev-master
README
这是一个用于处理Amazon SQS的bundle,旨在使用Symfony2处理队列。
创建这个bundle的背景是,类似于BCCResqueBundle,目的是使用Job进行数据处理。
要求
- PHP5.6+
- Symfony2.7+
安装
1: 执行composer install
$ composer require tavii/sqs-job-queue-bundle:0.0.3
2: 在AppKernel中注册SQSJobQueueBundle
<?php
// app/AppKernel.php
// ...
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
// ...
new Tavii\SQSJobQueueBunblde\SQSJobQueueBundle()
);
// ...
}
// ...
}
3: 在config.yml中添加设置
tavii_sqs_job_queue:
aws:
key: %aws_api_key%
secret: %aws_api_secret%
region: %aws_api_region%
使用
1: 设置数据库表
为将工作者信息记录到数据库,创建一个表。
目前,会创建一个名为`sqs_workers`的表。
$ app/console sqs_job_queue:storage-init
2: 在Amazon SQS中注册队列
在Amazon SQS侧注册队列。
您也可以从AWS的管理界面创建,但我们也提供了命令。这次我们将注册一个名为`test`的队列。
$ app/console sqs_job_queue:queue-create test
3: 创建Job类
创建一个负责处理工作的Job类。
这次我们将创建一个发送邮件的Job类。
创建一个继承自Tavii\SQSJobQueue\Job
类或Tavii\SQSJobQueueBundle\ContainerAwareJob
类的类。
这两个类的区别在于是否可以使用DI容器。
使用Tavii\SQSJobQueueBundle\ContainerAwareJob
可以启用DI容器。
请确保在处理成功的情况下返回true
。
<?php
// src/AppBundle/Job/SendMailJob.php
namespace AppBundle\Job;
use Tavii\SQSJobQueueBundle\ContainerAwareJob;
class SendMailJob extends ContainerAwareJob
{
public function getName()
{
return 'test'; // ここをキュー名と一致させること
}
public function run()
{
$message = \Swift_Message::newInstance()
->setFrom('hoge@fuga.com')
->setTo('fuga@hoge.com')
->setSubject('job test')
->setBody('job mail test');
$mailer = $this->getContainer()->get('mailer');
$ret = $mailer->send($message);
return true;
}
}
4: 将Job注册到队列
从Job的实例中,将其注册到队列。
<?php
...
$job = new TestJob();
$this->getContainer()->get('sqs_job_queue.queue')->push($job);
5: 执行工作者
要执行工作者,请执行sqs_job_queue:worker-run
。
$ app/console sqs_job_queue:worker-run test
6: 常驻工作者
要常驻工作者,请执行sqs_job_queue:worker-start
。
$ app/console sqs_job_queue:worker-start test
7: 停止工作者
要停止常驻工作者,请执行sqs_job_queue:worker-stop
。
$ app/console sqs_job_queue:worker-start test
事件调度器
我们触发了一些事件。
SQSJobQueueEvents::QUEUE_RECEIVED
在从SQS接收队列时发生事件。
SQSJobQueueEvents::QUEUE_SENT
在SQS接收队列时发生事件。
SQSJobQueueEvents::QUEUE_DELETED
在SQS的队列被删除时发生事件。
SQSJobQueueEvents::JOB_EXECUTE
在Job执行时发生事件。
SQSJobQueueEvents::JOB_RAN
在Job执行完成后发生事件。
待办事项
- 解决只能使用Doctrine进行存储的问题
- 提供管理界面