Update proxy web3

This commit is contained in:
2025-10-06 02:36:03 +07:00
parent de48e758cf
commit fa292d1688
2 changed files with 47 additions and 12 deletions

View File

@@ -167,13 +167,20 @@ const plugin: FastifyPluginAsyncTypebox = async (fastify) => {
const redisPassword = process.env.REDIS_PASSWORD; const redisPassword = process.env.REDIS_PASSWORD;
console.log('Redis URL:', redisUrl) console.log('Redis URL:', redisUrl)
console.log('Redis Password:', redisPassword) console.log('Redis Password:', redisPassword ? '***' : 'none')
// Create Redis client configuration // Create Redis client configuration with timeout
const redisConfig: any = { url: redisUrl }; const redisConfig: any = {
// if (redisPassword) { url: redisUrl,
// redisConfig.password = redisPassword; socket: {
// } connectTimeout: 3000, // 3 second connection timeout
reconnectStrategy: false // Don't retry on health check
}
};
if (redisPassword) {
redisConfig.password = redisPassword;
}
redisClient = createClient(redisConfig); redisClient = createClient(redisConfig);
@@ -182,9 +189,14 @@ const plugin: FastifyPluginAsyncTypebox = async (fastify) => {
console.error('Redis health check error:', err); console.error('Redis health check error:', err);
}); });
// Connect to Redis // Connect to Redis with timeout
const startTime = Date.now(); const startTime = Date.now();
await redisClient.connect(); await Promise.race([
redisClient.connect(),
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Connection timeout after 3s')), 3000)
)
]);
const connectTime = Date.now() - startTime; const connectTime = Date.now() - startTime;
// Test basic operations // Test basic operations

View File

@@ -34,10 +34,23 @@ async function initializeRedis() {
const redisPassword = process.env.REDIS_PASSWORD const redisPassword = process.env.REDIS_PASSWORD
console.log('Redis URL:', redisUrl) console.log('Redis URL:', redisUrl)
console.log('Redis Password:', redisPassword) console.log('Redis Password:', redisPassword ? '***' : 'none')
// Create Redis client with password support // Create Redis client with password support and timeouts
const redisConfig: any = { url: redisUrl } const redisConfig: any = {
url: redisUrl,
socket: {
connectTimeout: 5000, // 5 second connection timeout
reconnectStrategy: (retries: number) => {
// Exponential backoff: 50ms, 100ms, 200ms, 400ms, etc., max 3000ms
if (retries > 10) {
console.error('Redis: Max reconnection attempts reached')
return new Error('Max reconnection attempts reached');
}
return Math.min(retries * 50, 3000);
}
}
}
if (redisPassword) { if (redisPassword) {
redisConfig.password = redisPassword redisConfig.password = redisPassword
@@ -57,7 +70,17 @@ async function initializeRedis() {
console.log('Redis client ready for idempotency operations') console.log('Redis client ready for idempotency operations')
}) })
await redisClient.connect() redisClient.on('reconnecting', () => {
console.log('Redis client reconnecting...')
})
// Connect with timeout
await Promise.race([
redisClient.connect(),
new Promise((_, reject) =>
setTimeout(() => reject(new Error('Redis connection timeout after 5s')), 5000)
)
])
} catch (error) { } catch (error) {
console.error('Failed to connect to Redis:', error) console.error('Failed to connect to Redis:', error)
// Fallback to in-memory storage if Redis is not available // Fallback to in-memory storage if Redis is not available