优雅关闭(Graceful Shutdown)

HTTP Dispatcher使用标准包实现HTTP服务,因此可以直接使用context标准包来实现优雅关闭,示例如下:

  1. //获得调度器的实例
  2. dispatcher = httpdispatcher.New()
  3.  
  4. //定义HTTP服务
  5. svr := &http.Server{
  6. Addr: ":8080",
  7. Handler: dispatcher, //传入调度器
  8. }
  9.  
  10. //在新协程中启动服务
  11. go func() {
  12. if err := svr.ListenAndServe(); err != nil {
  13. log.Fatal(err.Error())
  14. }
  15. }()
  16.  
  17. //退出进程时等待
  18. quit := make(chan os.Signal)
  19. signal.Notify(quit, os.Interrupt)
  20. <-quit
  21. ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) //指定退出超时时间
  22. defer cancel()
  23. if err := svr.Shutdown(ctx); err != nil {
  24. log.Fatal(err.Error())
  25. }