|
@@ -89,12 +89,12 @@ func (svr *Service) worker() {
|
|
tick := node.(*tickPtr)
|
|
tick := node.(*tickPtr)
|
|
if tick.next.Before(time.Now()) {
|
|
if tick.next.Before(time.Now()) {
|
|
svr.tickTree.Delete(node)
|
|
svr.tickTree.Delete(node)
|
|
- if !tick.options.Canceled {
|
|
|
|
- if atomic.CompareAndSwapInt32(&tick.running, 0, 1) {
|
|
|
|
- svr.async(func() {
|
|
|
|
|
|
+ if atomic.CompareAndSwapInt32(&tick.running, 0, 1) {
|
|
|
|
+ svr.async(func() {
|
|
|
|
+ if !tick.options.Canceled {
|
|
tick.callback(tick.options.Context)
|
|
tick.callback(tick.options.Context)
|
|
- })
|
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
+ })
|
|
}
|
|
}
|
|
next := svr.tickTree.Min()
|
|
next := svr.tickTree.Min()
|
|
if next == nil {
|
|
if next == nil {
|
|
@@ -152,7 +152,7 @@ func (svr *Service) Handle(method string, cb HandleFunc, opts ...HandleOption) {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
//disable cli default
|
|
//disable cli default
|
|
- opt := &HandleOptions{HttpMethod: "POST", DisableCli: true}
|
|
|
|
|
|
+ opt := &HandleOptions{HttpMethod: hp.MethodPost, DisableCli: true}
|
|
for _, f := range opts {
|
|
for _, f := range opts {
|
|
f(opt)
|
|
f(opt)
|
|
}
|
|
}
|
|
@@ -304,7 +304,7 @@ func (svr *Service) instance() *registry.ServiceNode {
|
|
func (svr *Service) startHTTPServe() (err error) {
|
|
func (svr *Service) startHTTPServe() (err error) {
|
|
svr.httpSvr = http.New(svr.ctx)
|
|
svr.httpSvr = http.New(svr.ctx)
|
|
l := gateway.NewListener(svr.listener.Addr())
|
|
l := gateway.NewListener(svr.listener.Addr())
|
|
- if err = svr.gateway.Attaches([][]byte{[]byte("GET"), []byte("POST"), []byte("PUT"), []byte("DELETE"), []byte("OPTIONS")}, l); err == nil {
|
|
|
|
|
|
+ if err = svr.gateway.Attaches([][]byte{[]byte(hp.MethodGet), []byte(hp.MethodPost), []byte(hp.MethodPut), []byte(hp.MethodDelete), []byte(hp.MethodOptions)}, l); err == nil {
|
|
svr.async(func() {
|
|
svr.async(func() {
|
|
if err = svr.httpSvr.Serve(l); err != nil && atomic.LoadInt32(&svr.exitFlag) == 0 {
|
|
if err = svr.httpSvr.Serve(l); err != nil && atomic.LoadInt32(&svr.exitFlag) == 0 {
|
|
log.Warnf("http serve error: %s", err.Error())
|
|
log.Warnf("http serve error: %s", err.Error())
|
|
@@ -312,11 +312,12 @@ func (svr *Service) startHTTPServe() (err error) {
|
|
log.Infof("http server stopped")
|
|
log.Infof("http server stopped")
|
|
})
|
|
})
|
|
|
|
|
|
- svr.httpSvr.Handle("GET", "/healthy", func(ctx *http.Context) (err error) {
|
|
|
|
|
|
+ svr.httpSvr.Handle(hp.MethodGet, "/healthy", func(ctx *http.Context) (err error) {
|
|
return ctx.Success(map[string]interface{}{
|
|
return ctx.Success(map[string]interface{}{
|
|
"id": svr.node.ID,
|
|
"id": svr.node.ID,
|
|
"healthy": "Healthy",
|
|
"healthy": "Healthy",
|
|
"uptime": time.Now().Sub(svr.upTime).String(),
|
|
"uptime": time.Now().Sub(svr.upTime).String(),
|
|
|
|
+ "gateway": svr.gateway.State(),
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
|
|
@@ -400,19 +401,19 @@ func (svr *Service) prepare() (err error) {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
log.Infof("server listen on: %s", svr.listener.Addr())
|
|
log.Infof("server listen on: %s", svr.listener.Addr())
|
|
- svr.gateway = gateway.New(svr.listener, svr.opts.EnableStats)
|
|
|
|
|
|
+ svr.gateway = gateway.New(svr.listener)
|
|
svr.async(func() {
|
|
svr.async(func() {
|
|
svr.gateway.Run(svr.ctx)
|
|
svr.gateway.Run(svr.ctx)
|
|
})
|
|
})
|
|
- //开启HTTP服务
|
|
|
|
|
|
+ //start http server
|
|
if svr.opts.EnableHttp {
|
|
if svr.opts.EnableHttp {
|
|
err = svr.startHTTPServe()
|
|
err = svr.startHTTPServe()
|
|
}
|
|
}
|
|
- //开启RCP服务
|
|
|
|
|
|
+ //start rcp server
|
|
if svr.opts.EnableRPC {
|
|
if svr.opts.EnableRPC {
|
|
err = svr.startRPCServe()
|
|
err = svr.startRPCServe()
|
|
}
|
|
}
|
|
- //开启cli服务
|
|
|
|
|
|
+ //start cli server
|
|
if svr.opts.EnableCli {
|
|
if svr.opts.EnableCli {
|
|
err = svr.startCliServe()
|
|
err = svr.startCliServe()
|
|
}
|
|
}
|
|
@@ -428,11 +429,10 @@ func (svr *Service) prepare() (err error) {
|
|
err = nil
|
|
err = nil
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
if svr.opts.EnableReport {
|
|
if svr.opts.EnableReport {
|
|
- rn := rand.Int31n(48) + 60
|
|
|
|
|
|
+ rn := rand.Int31n(60) + 30
|
|
svr.DeferTick(time.Minute*time.Duration(rn), func(ctx context.Context) {
|
|
svr.DeferTick(time.Minute*time.Duration(rn), func(ctx context.Context) {
|
|
- if state, err2 := serviceReportAndChecked(svr.node.Name, svr.node.Version); err2 == nil {
|
|
|
|
|
|
+ if state, err2 := serviceReportAndChecked(svr.ctx, svr.node.Name, svr.node.Version); err2 == nil {
|
|
if state == serviceStateUnavailable {
|
|
if state == serviceStateUnavailable {
|
|
os.Exit(1)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
@@ -524,7 +524,10 @@ func (svr *Service) Run() (err error) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
ch := make(chan os.Signal, 1)
|
|
ch := make(chan os.Signal, 1)
|
|
- signal.Notify(ch, syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGKILL)
|
|
|
|
|
|
+ if svr.opts.Signals == nil {
|
|
|
|
+ svr.opts.Signals = []os.Signal{syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGKILL}
|
|
|
|
+ }
|
|
|
|
+ signal.Notify(ch, svr.opts.Signals...)
|
|
select {
|
|
select {
|
|
case <-ch:
|
|
case <-ch:
|
|
case <-svr.ctx.Done():
|
|
case <-svr.ctx.Done():
|