From ecda63761ccbc581fec4873e5f4c2b0012b21d77 Mon Sep 17 00:00:00 2001 From: nquidox Date: Thu, 2 Apr 2026 15:50:55 +0300 Subject: [PATCH] different type of check connection --- handler.go | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/handler.go b/handler.go index 249221f..e54146b 100644 --- a/handler.go +++ b/handler.go @@ -4,7 +4,6 @@ import ( "fmt" amqp "github.com/rabbitmq/amqp091-go" "log" - "net" "os" "sync" "time" @@ -82,14 +81,26 @@ func NewConsumer(client *Client) Consumer { } func (c *Client) connectAndSignal(addr string, timeout time.Duration) error { - dialer := &net.Dialer{Timeout: timeout} - conn, err := amqp.DialConfig(addr, amqp.Config{ - Dial: dialer.Dial, - }) - if err != nil { - return err + type result struct { + conn *amqp.Connection + err error + } + resCh := make(chan result, 1) + + go func() { + conn, err := amqp.Dial(addr) + resCh <- result{conn, err} + }() + + select { + case <-time.After(timeout): + return fmt.Errorf("connection timeout after %v", timeout) + case res := <-resCh: + if res.err != nil { + return res.err + } + c.connection = res.conn + close(c.connected) + return nil } - c.connection = conn - close(c.connected) - return nil }