优雅关闭(Graceful Shutdown)
HTTP Dispatcher使用标准包实现HTTP服务,因此可以直接使用context标准包来实现优雅关闭,示例如下:
- //获得调度器的实例
- dispatcher = httpdispatcher.New()
- //定义HTTP服务
- svr := &http.Server{
- Addr: ":8080",
- Handler: dispatcher, //传入调度器
- }
- //在新协程中启动服务
- go func() {
- if err := svr.ListenAndServe(); err != nil {
- log.Fatal(err.Error())
- }
- }()
- //退出进程时等待
- quit := make(chan os.Signal)
- signal.Notify(quit, os.Interrupt)
- <-quit
- ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) //指定退出超时时间
- defer cancel()
- if err := svr.Shutdown(ctx); err != nil {
- log.Fatal(err.Error())
- }