@@ -124,83 +124,56 @@ const getRedisClient = (): RedisClient | undefined => {
124124 return client
125125}
126126
127- const getRedisSubscriberClient = ( ) : RedisClient | undefined => {
127+ const getRedisSubscriberClient = async ( ) : Promise < RedisClient | undefined > => {
128128 if ( redisSubscriberClient ) {
129129 return redisSubscriberClient
130130 }
131131 if ( NEXUS_REFLECTION ?? isTest ) {
132132 return
133133 }
134134
135- const useSentinel = REDIS_SENTINELS && REDIS_SENTINEL_MASTER_NAME
136-
137- let client : RedisClient
138-
139- if ( useSentinel && REDIS_SENTINELS && REDIS_SENTINEL_MASTER_NAME ) {
140- const sentinels = REDIS_SENTINELS . split ( "," ) . map ( ( sentinel : string ) => {
141- const [ host , port ] = sentinel . trim ( ) . split ( ":" )
142- return { host, port : parseInt ( port ) ?? 26379 }
143- } )
144-
145- const sentinelClient = createSentinel ( {
146- name : REDIS_SENTINEL_MASTER_NAME ,
147- sentinelRootNodes : sentinels ,
148- nodeClientOptions : {
149- password : REDIS_PASSWORD ,
150- database : REDIS_DB ,
151- socket : {
152- reconnectStrategy : redisReconnectStrategy ( "Redis Subscriber" ) ,
153- } ,
154- } ,
155- } )
156-
157- sentinelClient . on ( "error" , ( err : any ) => {
158- _logger . error ( `Redis Sentinel subscriber error` , err )
159- } )
160- sentinelClient . on ( "ready" , ( ) => {
161- _logger . info (
162- `Redis Sentinel subscriber connected to master: ${ REDIS_SENTINEL_MASTER_NAME } ` ,
163- )
164- } )
165-
166- sentinelClient . connect ( ) . catch ( ( err : any ) => {
167- _logger . error ( `Redis Sentinel subscriber connection failed` , err )
168- } )
135+ // Wait for main client to be ready first
136+ const mainClient = getRedisClient ( )
137+ if ( ! mainClient ?. isOpen ) {
138+ _logger . info (
139+ "Waiting for main Redis client to be ready before creating subscriber" ,
140+ )
141+ return
142+ }
169143
170- client = sentinelClient as RedisClient
171- } else {
144+ try {
172145 let url = ( REDIS_URL && REDIS_URL . trim ( ) ) || "redis://127.0.0.1:6379"
173146 if ( url && ! url . startsWith ( "redis://" ) && ! url . startsWith ( "rediss://" ) ) {
174147 url = `redis://${ url } `
175148 }
176149 if ( url && ! url . includes ( ":" ) && ! url . includes ( "/" ) ) {
177150 url = `${ url } :6379`
178151 }
179- const regularClient = createClient ( {
152+
153+ const subscriber = createClient ( {
180154 url,
181155 password : REDIS_PASSWORD ,
182156 database : REDIS_DB ,
183157 socket : {
184158 reconnectStrategy : redisReconnectStrategy ( "Redis Subscriber" ) ,
185159 } ,
186- } )
160+ } ) as RedisClient
187161
188- regularClient . on ( "error" , ( err : any ) => {
162+ subscriber . on ( "error" , ( err : any ) => {
189163 _logger . error ( `Redis subscriber error` , err )
190164 } )
191- regularClient . on ( "ready" , ( ) => {
165+ subscriber . on ( "ready" , ( ) => {
192166 _logger . info ( `Redis subscriber connected to: ${ url } ` )
193167 } )
194168
195- regularClient . connect ( ) . catch ( ( err : any ) => {
196- _logger . error ( `Redis subscriber connection failed` , err )
197- } )
169+ await subscriber . connect ( )
198170
199- client = regularClient as RedisClient
171+ redisSubscriberClient = subscriber
172+ return redisSubscriberClient
173+ } catch ( err ) {
174+ _logger . error ( "Failed to create Redis subscriber client" , err )
175+ return
200176 }
201-
202- redisSubscriberClient = client
203- return client
204177}
205178
206179export { getRedisSubscriberClient }
0 commit comments