@@ -128,6 +128,7 @@ type Consumer struct {
128128 lookupdRecheckChan chan int
129129 lookupdHTTPAddrs []string
130130 lookupdQueryIndex int
131+ lookupdHttpClient * http.Client
131132
132133 wg sync.WaitGroup
133134 runningHandlers int32
@@ -326,6 +327,11 @@ func (r *Consumer) ChangeMaxInFlight(maxInFlight int) {
326327 }
327328}
328329
330+ // set lookupd http client
331+ func (r * Consumer ) SetLookupdHttpClient (httpclient * http.Client ) {
332+ r .lookupdHttpClient = httpclient
333+ }
334+
329335// ConnectToNSQLookupd adds an nsqlookupd address to the list for this Consumer instance.
330336//
331337// 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 {
355361 }
356362 }
357363 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+
358381 numLookupd := len (r .lookupdHTTPAddrs )
359382 r .mtx .Unlock ()
360383
@@ -468,7 +491,7 @@ retry:
468491 if r .config .AuthSecret != "" && r .config .LookupdAuthorization {
469492 headers .Set ("Authorization" , fmt .Sprintf ("Bearer %s" , r .config .AuthSecret ))
470493 }
471- err := apiRequestNegotiateV1 ("GET" , endpoint , headers , & data )
494+ err := apiRequestNegotiateV1 (r . lookupdHttpClient , "GET" , endpoint , headers , & data )
472495 if err != nil {
473496 r .log (LogLevelError , "error querying nsqlookupd (%s) - %s" , endpoint , err )
474497 retries ++
0 commit comments