【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へ投げる実装としました
以上です