Symfony Advent Calendar 2015 二日目の記事です。
http://qiita.com/advent-calendar/2015/symfony
前日の記事: DoctrineでSQLの日付関数を使う方法
処理の流れとしては、以下の様なイメージです。
- SymfonyアプリケーションがJobを生成し、Queueに渡す
- QueueがAmazonSQSにJobを登録
- WorkerがQueueを使ってJobを取得
- WorkerがJobを実行する
実際にSymfony2で使ってみる
流れとしては以下のとおりです。
- composerでインストール
- AppKernelに登録
- config.ymlの設定
- メール送信用のJobを用意する
- JobをQueueに登録する
- 登録したキューを実行する
composerでインストール
まずはcomopserでSQSJobQueueBundleを登録します。
|
|
AppKernelに登録
AppKernelに登録しましょう。
|
|
config.ymlの設定
config.ymlに追加を追記します。
AWSの設定とprefixを指定します。prefixを指定しないと、複数のアプリケーションで同じSQSを利用した場合に判別できなくなってしまいますので、application名+実行環境名
みたいな形でprefix指定する事をおすすめします。
|
|
メール送信用のJobを用意する
次にジョブを作ります。
どこのディレクトリに配置してもいいんですが、とりあえず今回はAppBundle\Job
に配置します。
|
|
Job::run()
の処理が成功の場合はtrueを返してください。
失敗した場合は、falseを返すようにしてください。
JobをQueueに登録する
Jobを登録します。
実行時に必要な動的なデータはここで定義します。
|
|
登録したキューを実行する
SendMailJobクラスを作った際にprotected $name = "send_mail"
と指定したので、send_mail
を指定してWorkerを実行します。
|
|
実際運用出来ているの?
実際に4ヶ月ほど運用していますが特にトラブルもなく、今のところは運用出来ています。
一部Workerの処理に問題がありますが、近いうちに修正する予定です。
今後修正する箇所
- workerの実装を全面的に見直す
- workerのwebページ作成
- ContainerAwareJobの見直し
などを予定しています。 もし何かあるようでしたらぜひgithubのissueをお願いします。
作ることによって、Symfony2をより理解できた
Symfony2を使ってwebアプリケーションを作っていましたが、Bundleを作るのは初めてでした。 なかなか良い経験が出来ました。
普段はBundleを使う側だったので気づかなかったけれど、SymfonyのBundleを作ると気づく事がたくさんあります。
何かのライブラリをSymfony2で使うためのBundleを作ると、ライブラリの設計についても学べると思います。
インターフェースの使い方なんかも勉強になると思います。
また、他のBundleの実装が気になってBundleの実装コードを読むようになります。
そこで気づく事がたくさんあると思うし、その後Symfony2を使ったアプリケーションを開発する際に必ず役立ちます。
Symfony2でアプリを作ってみたあとは、ぜひBundle作りにチャレンジしてみてはいかがでしょうか?
最後に
AWS環境でメッセージ・キューを利用したい場合は、ぜひSQSJobQueueBundleを使ってみてください。