Laravel5でAWSのSQSを使う 複数のキューを処理する方法
Laravel5でAWSのQueueサービスであるSQSに2つのキューを作成して、処理を実行させる。
[下準備]
- AWSの管理画面にログイン
- SQSに移動して、2つのキューを作成する
- 注文メールの送信処理をするORDER_MAIL_QUEUEというキューを作成。
- 商品在庫が少ないことを管理者に警告するALERT_MAIL_QUEUEを作成。
- ユーザーにアクセス権を与えて終了
- SQSに移動して、2つのキューを作成する
[Laravel]
- .envファイルを編集
- QUEUE_DRIVERの値をsqsに変更
- config/queue.phpを編集
- connectionsの項目に、sqsドライバーを使用したコネクションを2つ定義する
- コネクション名は自由
- keyとsecretはIAMのアクセスキーを指定。
- queueにはキューのプロパティの項目に表示されているURLを指定。
- regionは使用しているリュージョン。
- connectionsの項目に、sqsドライバーを使用したコネクションを2つ定義する
<?php return [ // .envファイル内でQUEUE_DRIVERの値をsqsに変更していれば、無編集でOK。 'default' => env('QUEUE_DRIVER', 'sync'), 'connections' => [ /* 省略 */ 'order_mail_queue' => [ 'driver' => 'sqs', 'key' => '******************', 'secret' => '***********************', 'queue' => 'https://sqs.ap-northeast-1.amazonaws.com/hogehoge/ORDER_MAIL_QUEUE', 'region' => 'ap-northeast-1', ], 'alert_mail_queue' => [ 'driver' => 'sqs', 'key' => '******************', 'secret' => '***********************', 'queue' => 'https://sqs.ap-northeast-1.amazonaws.com/hogehoge/ALERT_MAIL_QUEUE', 'region' => 'ap-northeast-1', ], ], ]
- コマンドラインから2つのキューに処理させるジョブを作成する
- app/Jobs/ディレクトリに2つのジョブが作成されていることを確認して、各ジョブに処理内容を記述する
<?php /** OrderMailJob **/ protected $order; /** * Create a new job instance. * * @return void */ public function __construct($orderNumber) { $this->order=Order::find($orderNumber); } /** * Execute the job. * * @return void */ public function handle() { // 注文メールを送信 echo $this->order->order_name."さん あなたに注文メールを送りました!"; // 以下送信処理省略 }
<?php /** AlertMailJob **/ protected $item; /** * Create a new job instance. * * @return void */ public function __construct($itemId) { $this->item=Item::find($itemId); } /** * Execute the job. * * @return void */ public function handle() { // 在庫警告メールを送信 echo "店長" .$item->item_name."の在庫がやばいです!補充して下さい!"; // 以下送信処理省略 }
- ジョブをキューの最後尾に追加する。
<?php Route::get("/job",function(){ \Queue::push(new \App\Jobs\OrderMailJob("ORDER_0001"),null,"order_mail_queue"); \Queue::push(new \App\Jobs\AlertMailJob("ITM_0001"),null,"alert_mail_queue"); });