読者です 読者をやめる 読者になる 読者になる

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

以上です