Developed with love by KnpLabs Hire us for your project!
0

SQSJobQueueBundle

by tavii

amazon sqs job queue bundle

SQSJobQueueBundle

Build Status
Coverage Status
Scrutinizer Code Quality
Latest Stable Version Total Downloads Latest Unstable Version License

SQSJobQueueをSymfony2で扱う為のバンドル。

作った背景としては、Amaazon SQSをBCCResqueBundleと同じような感じで、Jobを利用した処理ができるということを目的につくりました。

Requirements

  • PHP5.6+
  • Symfony2.7+

Installation

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%

Usage

1: setup databsae table

ワーカーの情報をDBに記録するために、テーブルを生成します。

現状は、sqs_workersというテーブルが作成されるようになっています。

$ app/console sqs_job_queue:storage-init

2: Amazon SQSにキューを登録する

amazon sqs側にqueueを登録します。

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

EventDispatcher

いくつかEventを発生させるようにしました。

SQSJobQueueEvents::QUEUE_RECEIVED

SQSからキューを受け取った際にイベントが発生します。

SQSJobQueueEvents::QUEUE_SENT

SQSがキューを受け付けた場合にイベントが発生します。

SQSJobQueueEvents::QUEUE_DELETED

SQSのキューが削除された際にイベントが発生します。

SQSJobQueueEvents::JOB_EXECUTE

Jobが実行された際にイベントが発生します。

SQSJobQueueEvents::JOB_RAN

Jobの実行が完了した際にイベントが発生します。

TODO

  • ストレージがDoctrineしか使えない問題の解消
  • 管理画面の提供
The MIT License (MIT)

Copyright (c) 2015 tavii.com Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
sqs_job_queue:
prefix:
aws:
key: ~
secret: ~
region: ap-northeast-1