laravel非同期処理(キュー)をお手軽に使ってみた
◆キュー
--------------キュー--------------
実行(ディスパッチ) -> |タスク1| タスク2| ->handleメソッド
----------------------------------
イベントを発火するとキューにため込んで登録された順番に従って、実行される。
◆使いどころ
大量のメール送信や大容量のファイルを扱う処理は、時間がかかり、ユーザーのストレスになる可能性がある。
キューを使うと、処理結果をレスポンスにすることはできないが、通常のwebアプリの流れであるリクエスト・レスポンスとは別のタスク(ジョブ)として実行することができ、時間がかかる処理をユーザーが待機する必要がなくなる。
◆作成してみる
ジョブ(タスク)をため込むためのQueueとして、データベース・SQS・Redisなどを利用できるが、前回に続き、Redisを使用する。
[前回記事]https://qiita.com/hekizi/items/5d17e50c912614f28344#%E9%9D%9E%E5%90%8C%E6%9C%9F%E3%83%AA%E3%82%B9%E3%83%8A%E3%83%BC%E3%82%92%E5%AE%9F%E8%A3%85
今回作成する機能:前回と同じアクセス時に、アクセスIPをLogに記述する
php artisan make:job AccessIpRecordJob
class AccessIpRecordJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct()
{
//
}
public function handle()
{
//
}
}
前回非同期用リスナーを作成したが、その実装(implements)するクラスやトレイトがもともと用意されている感じのクラスがJobs配下に作成されました。
class AccessIpRecordJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
private $ip;
public function __construct($ip)
{
$this->ip = $ip;
}
public function handle()
{
Log::info($this->ip);
}
}
コンストラクタでIP受け取り、イベント発火時に保存という形にした。
class SampleController extends Controller
{
public function sampleQueue(Request $request)
{
$this->dispatch(new AccessIpRecordJob($request->ip()));
}
}
Route::get('/sampleQueue', 'SampleController@sampleQueue');
コントローラーとこれにアクセスするルートを用意
php artisan queue:work
[2019-04-07 00:00:00][○○] Processing: App\Jobs\AccessIpRecordJob
[2019-04-07 00:00:00][○○] Processed: App\Jobs\AccessIpRecordJob
php artisan queue:workでキューを監視(非同期用)して、アクセスすると実行されていることがわかる
[2019-04-07 00:00:00] local.INFO: 192.168.99.1
ちゃんと記述されている。完了
[参考にさせていただいた記事]
https://www.ritolab.com/entry/36
Author And Source
この問題について(laravel非同期処理(キュー)をお手軽に使ってみた), 我々は、より多くの情報をここで見つけました https://qiita.com/shibaHaya/items/4e450b40bb0915b94158著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .