Browse Source

优化服务注册逻辑

lxg 3 years ago
parent
commit
c244167a8b
1 changed files with 30 additions and 19 deletions
  1. 30 19
      service.go

+ 30 - 19
service.go

@@ -39,23 +39,24 @@ var (
 )
 
 type Service struct {
-	opts        *Options
-	ctx         context.Context
-	cancelFunc  context.CancelFunc
-	registry    registry.Registry
-	node        *registry.ServiceNode
-	listener    net.Listener
-	gateway     *gateway.Gateway
-	wg          sync.WaitGroup
-	httpSvr     *http.Server
-	rpcSvr      *rpc.Server
-	cliSvr      *cli.Server
-	upTime      time.Time
-	client      *Client
-	tickTimer   *time.Timer
-	tickTree    *btree.BTree
-	environment string
-	exitFlag    int32
+	opts          *Options
+	ctx           context.Context
+	cancelFunc    context.CancelFunc
+	registry      registry.Registry
+	node          *registry.ServiceNode
+	listener      net.Listener
+	gateway       *gateway.Gateway
+	wg            sync.WaitGroup
+	httpSvr       *http.Server
+	rpcSvr        *rpc.Server
+	cliSvr        *cli.Server
+	upTime        time.Time
+	client        *Client
+	triesRegister int
+	tickTimer     *time.Timer
+	tickTree      *btree.BTree
+	environment   string
+	exitFlag      int32
 }
 
 func (svr *Service) async(f func()) {
@@ -105,7 +106,12 @@ func (svr *Service) worker() {
 		case <-ticker.C:
 			if !svr.opts.DisableRegister {
 				if err = svr.registry.Register(svr.node); err != nil {
-					log.Warnf("registry service %s error: %s", svr.opts.Name, err.Error())
+					svr.triesRegister++
+					if svr.triesRegister%15 == 0 {
+						log.Warnf("try register service %s failed to many times", svr.opts.ShortName(), err.Error())
+					}
+				} else {
+					svr.triesRegister = 0
 				}
 			}
 		case <-svr.ctx.Done():
@@ -177,6 +183,7 @@ func (svr *Service) NewRequest(name, method string, body interface{}) (req *Requ
 	}, nil
 }
 
+//PeekService 选取一个可靠的服务
 func (svr *Service) PeekService(name string) ([]*registry.ServiceNode, error) {
 	return svr.registry.Get(name)
 }
@@ -381,7 +388,11 @@ func (svr *Service) prepare() (err error) {
 		svr.worker()
 	})
 	if !svr.opts.DisableRegister {
-		_ = svr.registry.Register(svr.node)
+		if err = svr.registry.Register(svr.node); err != nil {
+			log.Warnf("try register %s failed cause by %s", svr.opts.ShortName(), err.Error())
+			svr.triesRegister++
+			err = nil
+		}
 	}
 	if svr.opts.EnableReport {
 		rn := rand.Int31n(48) + 60