@@ -265,6 +265,13 @@ func (app *Application) Stop() (err error) {
265
265
for _ , s := range app .servers {
266
266
func (s server.Server ) {
267
267
app .smu .RLock ()
268
+ // unregister before stop
269
+ e := registry .DefaultRegisterer .UnregisterService (context .Background (), s .Info ())
270
+ if e != nil {
271
+ app .logger .Error ("exit server" , xlog .FieldMod (ecode .ModApp ), xlog .FieldEvent ("stop" ), xlog .FieldName (s .Info ().Name ), xlog .FieldAddr (s .Info ().Label ()), xlog .FieldErr (err ))
272
+ }
273
+ app .logger .Info ("exit server" , xlog .FieldMod (ecode .ModApp ), xlog .FieldEvent ("stop" ), xlog .FieldName (s .Info ().Name ), xlog .FieldAddr (s .Info ().Label ()))
274
+
268
275
app .cycle .Run (s .Stop )
269
276
app .smu .RUnlock ()
270
277
}(s )
@@ -296,6 +303,13 @@ func (app *Application) GracefulStop(ctx context.Context) (err error) {
296
303
app .cycle .Run (func () error {
297
304
app .smu .RLock ()
298
305
defer app .smu .RUnlock ()
306
+ // unregister before graceful stop
307
+ e := registry .DefaultRegisterer .UnregisterService (ctx , s .Info ())
308
+ if e != nil {
309
+ app .logger .Error ("exit server" , xlog .FieldMod (ecode .ModApp ), xlog .FieldEvent ("graceful stop" ), xlog .FieldName (s .Info ().Name ), xlog .FieldAddr (s .Info ().Label ()), xlog .FieldErr (err ))
310
+ }
311
+ app .logger .Info ("exit server" , xlog .FieldMod (ecode .ModApp ), xlog .FieldEvent ("graceful stop" ), xlog .FieldName (s .Info ().Name ), xlog .FieldAddr (s .Info ().Label ()))
312
+
299
313
return s .GracefulStop (ctx )
300
314
})
301
315
}(s )
@@ -320,9 +334,10 @@ func (app *Application) GracefulStop(ctx context.Context) (err error) {
320
334
func (app * Application ) waitSignals () {
321
335
app .logger .Info ("init listen signal" , xlog .FieldMod (ecode .ModApp ), xlog .FieldEvent ("init" ))
322
336
signals .Shutdown (func (grace bool ) { //when get shutdown signal
323
- //todo: support timeout
324
337
if grace {
325
- _ = app .GracefulStop (context .TODO ())
338
+ ctx , cancel := context .WithTimeout (context .Background (), 3 * time .Second )
339
+ defer cancel ()
340
+ _ = app .GracefulStop (ctx )
326
341
} else {
327
342
_ = app .Stop ()
328
343
}
@@ -354,13 +369,6 @@ func (app *Application) startServers() error {
354
369
for _ , s := range app .servers {
355
370
s := s
356
371
eg .Go (func () (err error ) {
357
- defer func () {
358
- ctx , cancel := context .WithTimeout (context .Background (), 3 * time .Second )
359
- defer cancel ()
360
- _ = registry .DefaultRegisterer .UnregisterService (ctx , s .Info ())
361
- app .logger .Info ("exit server" , xlog .FieldMod (ecode .ModApp ), xlog .FieldEvent ("exit" ), xlog .FieldName (s .Info ().Name ), xlog .FieldErr (err ), xlog .FieldAddr (s .Info ().Label ()))
362
- }()
363
-
364
372
time .AfterFunc (time .Second , func () {
365
373
_ = registry .DefaultRegisterer .RegisterService (ctx , s .Info ())
366
374
app .logger .Info ("start server" , xlog .FieldMod (ecode .ModApp ), xlog .FieldEvent ("init" ), xlog .FieldName (s .Info ().Name ), xlog .FieldAddr (s .Info ().Label ()), xlog .Any ("scheme" , s .Info ().Scheme ))
0 commit comments