docker-redis - local tests

Signed-off-by: Dave Richer <dave@imexsystems.ca>
This commit is contained in:
Dave Richer
2024-10-02 00:27:11 -04:00
parent b7423aebf6
commit 04dec6d91c
14 changed files with 456 additions and 18 deletions

View File

@@ -6,7 +6,8 @@ const compression = require("compression");
const cookieParser = require("cookie-parser");
const http = require("http");
const { Server } = require("socket.io");
const { createClient } = require("redis");
// const { createClient } = require("redis");
const Redis = require("ioredis");
const { createAdapter } = require("@socket.io/redis-adapter");
const logger = require("./server/utils/logger");
const { redisSocketEvents } = require("./server/web-sockets/redisSocketEvents");
@@ -108,19 +109,48 @@ const applyRoutes = (app) => {
* @param app
*/
const applySocketIO = async (server, app) => {
// Redis client setup for Pub/Sub and Key-Value Store
const pubClient = createClient({ url: process.env.REDIS_URL || "redis://localhost:6379" });
const redisCluster = new Redis.Cluster(
process.env.REDIS_URL
? JSON.parse(process.env.REDIS_URL)
: [
{
host: "redis://localhost:6379"
}
],
{
clusterRetryStrategy: function (times) {
const delay = Math.min(100 + times * 50, 2000);
logger.log(
`[${process.env.NODE_ENV}] Redis cluster not yet ready. Retrying in ${delay}ms`,
"ERROR",
"redis",
"api"
);
return delay;
}
}
);
// Handle errors
redisCluster.on("error", (err) => {
logger.log(`[${process.env.NODE_ENV}] Redis ERROR`, "ERROR", "redis", "api");
});
const pubClient = redisCluster;
const subClient = pubClient.duplicate();
// https://github.com/redis/node-redis/blob/master/docs/clustering.md
// https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/accessing-elasticache.html
pubClient.on("error", (err) => logger.log(`Redis pubClient error: ${err}`, "ERROR", "redis"));
subClient.on("error", (err) => logger.log(`Redis subClient error: ${err}`, "ERROR", "redis"));
try {
await Promise.all([pubClient.connect(), subClient.connect()]);
logger.log(`[${process.env.NODE_ENV}] Connected to Redis`, "INFO", "redis", "api");
} catch (redisError) {
logger.log("Failed to connect to Redis", "ERROR", "redis", redisError);
}
// try {
// // await Promise.all([pubClient.connect(), subClient.connect()]);
// // logger.log(`[${process.env.NODE_ENV}] Connected to Redis`, "INFO", "redis", "api");
// // } catch (redisError) {
// // logger.log("Failed to connect to Redis", "ERROR", "redis", redisError);
// // }
process.on("SIGINT", async () => {
logger.log("Closing Redis connections...", "INFO", "redis", "api");