Przeglądaj źródła

处理修改service关闭逻辑

fancl 2 lat temu
rodzic
commit
8c885ffa1c
1 zmienionych plików z 10 dodań i 6 usunięć
  1. 10 6
      service.go

+ 10 - 6
service.go

@@ -448,6 +448,7 @@ func (svr *Service) destroy() (err error) {
 		return
 	}
 	log.Infof("service stopping")
+	svr.cancelFunc()
 	if !svr.opts.DisableRegister {
 		if err = svr.registry.Deregister(svr.ctx, svr.node); err != nil {
 			log.Warnf("service %s deregister error: %s", svr.opts.Name, err.Error())
@@ -455,7 +456,6 @@ func (svr *Service) destroy() (err error) {
 			log.Infof("service %s deregister successful", svr.opts.Name)
 		}
 	}
-	svr.cancelFunc()
 	if svr.listener != nil {
 		if err = svr.listener.Close(); err != nil {
 			log.Warnf(err.Error())
@@ -477,6 +477,12 @@ func (svr *Service) destroy() (err error) {
 			tick.callback(tick.options.Context)
 		}
 	}
+	//stop server
+	if svr.opts.Server != nil {
+		if err = svr.opts.Server.Stop(); err != nil {
+			log.Warnf("server %s stop error: %s", svr.opts.Name, err.Error())
+		}
+	}
 	svr.wg.Wait()
 	log.Infof("service stopped")
 	return
@@ -523,16 +529,14 @@ func (svr *Service) Run() (err error) {
 	case <-ch:
 	case <-svr.ctx.Done():
 	}
-	//stop server
-	if svr.opts.Server != nil {
-		err = svr.opts.Server.Stop()
-	}
 	return svr.destroy()
 }
 
 //Shutdown close service
 func (svr *Service) Shutdown() {
-	svr.cancelFunc()
+	if atomic.LoadInt32(&svr.exitFlag) == 0 {
+		svr.cancelFunc()
+	}
 }
 
 //Context return the service context