【aws】sqsでのエラー処理実装
はじめに
sqs使ってみたけどちょいちょいエラーが発生します。
頻度とかは出していませんが、キューへの登録だけでも1日数回起きるのでエラー時を考慮した実装は必須かと思われます
今回の使用用途
1. ユーザーがサイトにアクセス
2. 1の内容をsqsのキューに登録
※この内容を全ユーザー分集計したいのだが直接dbを更新するのは負荷的な懸念があったのでsqsのキューへ登録する形としました
3. 定期的にキューから取得して取得分を集計してdbを更新
という感じで、2でのsqsへの登録時にちょいちょいエラーが出るのでこれを考慮した実装が必要でした
登録処理実装
try { $client = new SqsClient(array( "region" => "sqsのリージョン", "version" => "sdkのバージョン", )); $result = $client->sendMessage(array( "QueueUrl" => "キューのurl", "MessageBody" => json_encode($data), // キューに登録したいデータ(今回はjson) )); // レスポンスのステータスコードチェック $success = false; $result = $result->toArray(); if (isset($result["@metadata"])) { $metadata = $result["@metadata"]; if (isset($metadata["statusCode"]) && $metadata["statusCode"] =="200") { $success = true; } } if (!$success) { thrown new Exception; } // 成功 } catch (Exception $e) { // エラー // 登録すべきだったjsonをファイルなりdbなりに保存 }
定期的にエラーファイルなりdbなりをcronでチェックしてエラーがあればjsonをそのままsqsへ投げる実装としました
以上です