Registration Retry / Interval (#1651)
* Change the default ttl to 90 seconds * add retries to registration * Add retry to web register
This commit is contained in:
		| @@ -20,6 +20,7 @@ import ( | ||||
| 	"github.com/micro/go-micro/v2/registry" | ||||
| 	"github.com/micro/go-micro/v2/transport" | ||||
| 	"github.com/micro/go-micro/v2/util/addr" | ||||
| 	"github.com/micro/go-micro/v2/util/backoff" | ||||
| 	mnet "github.com/micro/go-micro/v2/util/net" | ||||
| 	"github.com/micro/go-micro/v2/util/socket" | ||||
| ) | ||||
| @@ -514,18 +515,39 @@ func (s *rpcServer) Subscribe(sb Subscriber) error { | ||||
| } | ||||
|  | ||||
| func (s *rpcServer) Register() error { | ||||
|  | ||||
| 	s.RLock() | ||||
| 	rsvc := s.rsvc | ||||
| 	config := s.Options() | ||||
| 	s.RUnlock() | ||||
|  | ||||
| 	if rsvc != nil { | ||||
| 	regFunc := func(service *registry.Service) error { | ||||
| 		// create registry options | ||||
| 		rOpts := []registry.RegisterOption{registry.RegisterTTL(config.RegisterTTL)} | ||||
| 		if err := config.Registry.Register(rsvc, rOpts...); err != nil { | ||||
| 			return err | ||||
|  | ||||
| 		var regErr error | ||||
|  | ||||
| 		for i := 0; i < 3; i++ { | ||||
| 			// attempt to register | ||||
| 			if err := config.Registry.Register(service, rOpts...); err != nil { | ||||
| 				// set the error | ||||
| 				regErr = err | ||||
| 				// backoff then retry | ||||
| 				time.Sleep(backoff.Do(i + 1)) | ||||
| 				continue | ||||
| 			} | ||||
| 			// success so nil error | ||||
| 			regErr = nil | ||||
| 			break | ||||
| 		} | ||||
|  | ||||
| 		return regErr | ||||
| 	} | ||||
|  | ||||
| 	// have we registered before? | ||||
| 	if rsvc != nil { | ||||
| 		if err := regFunc(rsvc); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| @@ -635,10 +657,8 @@ func (s *rpcServer) Register() error { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	// create registry options | ||||
| 	rOpts := []registry.RegisterOption{registry.RegisterTTL(config.RegisterTTL)} | ||||
|  | ||||
| 	if err := config.Registry.Register(service, rOpts...); err != nil { | ||||
| 	// register the service | ||||
| 	if err := regFunc(service); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user