From 08554a0494344b1b3d4e21d998c5b58f9d2f64a0 Mon Sep 17 00:00:00 2001 From: braginini Date: Wed, 21 Apr 2021 19:01:38 +0200 Subject: [PATCH] feat: improve signal server reconnect logic --- signal/client.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/signal/client.go b/signal/client.go index 1ca404a1c..2a0971c26 100644 --- a/signal/client.go +++ b/signal/client.go @@ -65,16 +65,30 @@ func NewClient(addr string, ctx context.Context) (*Client, error) { func (client *Client) Receive(key string, msgHandler func(msg *proto.Message) error) { client.connWg.Add(1) go func() { + + var backOff = &backoff.ExponentialBackOff{ + InitialInterval: backoff.DefaultInitialInterval, + RandomizationFactor: backoff.DefaultRandomizationFactor, + Multiplier: backoff.DefaultMultiplier, + MaxInterval: 3 * time.Second, + MaxElapsedTime: time.Duration(0), //never stop + Stop: backoff.Stop, + Clock: backoff.SystemClock, + } + operation := func() error { err := client.connect(key, msgHandler) if err != nil { log.Warnf("disconnected from the Signal Exchange due to an error %s. Retrying ... ", err) client.connWg.Add(1) + return err } - return err + + backOff.Reset() + return nil } - err := backoff.Retry(operation, backoff.NewExponentialBackOff()) + err := backoff.Retry(operation, backOff) if err != nil { log.Errorf("error while communicating with the Signal Exchange %s ", err) return