docker-redis - local tests
Signed-off-by: Dave Richer <dave@imexsystems.ca>
This commit is contained in:
48
server.js
48
server.js
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user