## 概要 [Task3025: [ライセンスアラート改善]リトライ対応](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3025) ライセンスアラート処理にリトライ処理を追加しました。 メールの多重送信を防ぐために、送信成功したメールについてはredisに保存し、送信時にキャッシュをチェックする処理を入れました。 ## レビューポイント 処理の流れが妥当か。 redisに保存するキー、値は適切か。 if文のネストが相当深くなってしまったが、改善できるポイントはあるか。 ## UIの変更 なし ## 動作確認状況 ローカルで動作確認済み。(テスト用コードで無理やりエラーを発生させての確認) ## 補足 なし
58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
import { createClient, RedisClient } from "redis";
|
|
import { error } from "console";
|
|
|
|
export const createRedisClient = (): RedisClient => {
|
|
if (
|
|
!process.env.REDIS_HOST ||
|
|
!process.env.REDIS_PORT ||
|
|
!process.env.REDIS_PASSWORD
|
|
) {
|
|
throw error("Required environment variables are not set.");
|
|
}
|
|
|
|
const host = process.env.REDIS_HOST;
|
|
const port = parseInt(process.env.REDIS_PORT, 10);
|
|
const password = process.env.REDIS_PASSWORD;
|
|
|
|
let client: RedisClient;
|
|
if (process.env.STAGE === "local") {
|
|
client = createClient({
|
|
host: host,
|
|
port: port,
|
|
password: password,
|
|
retry_strategy: (options) => {
|
|
if (options.attempt <= 3) {
|
|
console.log(
|
|
`Retrying connection to Redis. Attempt ${options.attempt}`
|
|
);
|
|
return 10000; // ミリ秒単位でのリトライまでの間隔
|
|
} else {
|
|
console.log("Exceeded maximum number of connection attempts.");
|
|
return undefined; // リトライを終了
|
|
}
|
|
},
|
|
});
|
|
} else {
|
|
client = createClient({
|
|
url: `rediss://${host}:${port}`,
|
|
password: password,
|
|
tls: {},
|
|
retry_strategy: (options) => {
|
|
if (options.attempt <= 3) {
|
|
console.log(
|
|
`Retrying connection to Redis. Attempt ${options.attempt}`
|
|
);
|
|
return 10000; // ミリ秒単位でのリトライまでの間隔
|
|
} else {
|
|
console.log("Exceeded maximum number of connection attempts.");
|
|
return undefined; // リトライを終了
|
|
}
|
|
},
|
|
});
|
|
}
|
|
|
|
client.on("error", (err) => console.log("Redis Client Error", err));
|
|
|
|
return client;
|
|
};
|