@@ -128,6 +128,7 @@ type Consumer struct {
128
128
lookupdRecheckChan chan int
129
129
lookupdHTTPAddrs []string
130
130
lookupdQueryIndex int
131
+ lookupdHttpClient * http.Client
131
132
132
133
wg sync.WaitGroup
133
134
runningHandlers int32
@@ -326,6 +327,11 @@ func (r *Consumer) ChangeMaxInFlight(maxInFlight int) {
326
327
}
327
328
}
328
329
330
+ // set lookupd http client
331
+ func (r * Consumer ) SetLookupdHttpClient (httpclient * http.Client ) {
332
+ r .lookupdHttpClient = httpclient
333
+ }
334
+
329
335
// ConnectToNSQLookupd adds an nsqlookupd address to the list for this Consumer instance.
330
336
//
331
337
// If it is the first to be added, it initiates an HTTP request to discover nsqd
@@ -355,6 +361,23 @@ func (r *Consumer) ConnectToNSQLookupd(addr string) error {
355
361
}
356
362
}
357
363
r .lookupdHTTPAddrs = append (r .lookupdHTTPAddrs , parsedAddr )
364
+ if r .lookupdHttpClient == nil {
365
+ transport := & http.Transport {
366
+ DialContext : (& net.Dialer {
367
+ Timeout : r .config .LookupdPollTimeout ,
368
+ KeepAlive : 30 * time .Second ,
369
+ }).DialContext ,
370
+ ResponseHeaderTimeout : r .config .LookupdPollTimeout ,
371
+ MaxIdleConns : 100 ,
372
+ IdleConnTimeout : 90 * time .Second ,
373
+ TLSHandshakeTimeout : 10 * time .Second ,
374
+ }
375
+ r .lookupdHttpClient = & http.Client {
376
+ Transport : transport ,
377
+ Timeout : r .config .LookupdPollTimeout ,
378
+ }
379
+ }
380
+
358
381
numLookupd := len (r .lookupdHTTPAddrs )
359
382
r .mtx .Unlock ()
360
383
@@ -468,7 +491,7 @@ retry:
468
491
if r .config .AuthSecret != "" && r .config .LookupdAuthorization {
469
492
headers .Set ("Authorization" , fmt .Sprintf ("Bearer %s" , r .config .AuthSecret ))
470
493
}
471
- err := apiRequestNegotiateV1 ("GET" , endpoint , headers , & data )
494
+ err := apiRequestNegotiateV1 (r . lookupdHttpClient , "GET" , endpoint , headers , & data )
472
495
if err != nil {
473
496
r .log (LogLevelError , "error querying nsqlookupd (%s) - %s" , endpoint , err )
474
497
retries ++
0 commit comments