Skip to content
hetiansu5 edited this page Jul 8, 2019 · 1 revision

简介

在「日常生活」中 使用任何工具时,如果理解了该工具的工作原理。那么用起来就会更加得心应手。应用开发也是如此,当你能真正懂得一个功能背后实现原理时,用起来会更加顺手,方便。 文档存在目的是为了让你更加清晰地了解 Snow 框架是如何工作。通过框架进行全面了解,让一切都不再感觉很「神奇」。相信我,这有助于你更加清楚自己在做什么,对自己想做的事情更加胸有成竹。只要多一点尝试、学着如何运用,随着你浏览文档的其他部分,你用起来一定会更得心应手。

概述

程序入口

Snow 应用的程序入口为根目录 main.go 文件。找到了入口,也就知道了整个程序的起点,后续就是沿着代码的逻辑脉络加以理解了。

HTTP

在main.go启动HTTP服务

## 配置文件路径,进程号路径,服务预启动回调函数,路由注册回调函数
server.StartHttp(opts.ConfFile, pidFile, bootstrap.Bootstrap, routes.RegisterRoute)

## 具体启动逻辑
func StartHttp(confFile, pidFile string, boot func(config *config.Config) error, registerRoute func(*gin.Engine)) error {
   //加载配置文件
   conf, err := config.Load(confFile)
   if err != nil {
      return err
   }

   //初始化服务信息
   err = initServer()
   if err != nil {
      return fmt.Errorf("init server failed, %s", err.Error())
   }

   //容器初始化
   err = boot(conf)
   if err != nil {
      return fmt.Errorf("container ini failed %s", err.Error())
   }

   //配置路由引擎
   engine := gin.Default()
   registerRoute(engine)
   addr := conf.Api.Host + ":" + strconv.Itoa(conf.Api.Port)
   runEngine(engine, addr, pidFile)

   go func() {
      srv.stop <- true
   }()

   //等待停止信号
   waitStop()
   return nil
}

任务调度

在main.go启动任务调度服务

## 配置文件路径,进程号路径,服务预启动回调函数,任务注册回调函数
server.StartConsole(opts.ConfFile, pidFile, bootstrap.Bootstrap, console.RegisterSchedule)
 
## 具体启动逻辑
func StartConsole(confFile, pidFile string, boot func(*config.Config) error, registerSchedule func(*cron.Cron)) error {
   //加载配置文件
   conf, err := config.Load(confFile)
   if err != nil {
      return err
   }

   //初始化服务信息
   err = initServer()
   if err != nil {
      return fmt.Errorf("init server failed, %s", err.Error())
   }

   //容器初始化
   err = boot(conf)
   if err != nil {
      return fmt.Errorf("container ini failed %s", err.Error())
   }

   //注册Cron执行计划
   cronEngine := cron.New()
   registerSchedule(cronEngine)
   cronEngine.Start()

   //写pid文件
   writePidFile(pidFile)

   //注册信号量
   registerSignal()

   //等待停止信号
   waitConsoleStop(cronEngine)
   return nil
}

队列调度

在main.go启动队列调度服务

## 配置文件路径,进程号路径,服务预启动回调函数,Workder注册回调函数
server.StartJob(opts.ConfFile, pidFile, bootstrap.Bootstrap, jobs.RegisterWorker)
 
## 具体启动逻辑
func StartJob(confFile, pidFile string, boot func(*config.Config) error, registerWorker func(*work.Job)) error {
   //加载配置文件
   conf, err := config.Load(confFile)
   if err != nil {
      return err
   }

   //初始化服务信息
   err = initServer()
   if err != nil {
      return fmt.Errorf("init server failed, %s", err.Error())
   }

   //容器初始化
   err = boot(conf)
   if err != nil {
      return fmt.Errorf("container ini failed %s", err.Error())
   }

   //注册Job Worker
   job := work.New()
   registerWorker(job)
   job.Start()

   //写pid文件
   writePidFile(pidFile)

   //注册信号量
   registerSignal()

   //等待停止信号
   waitJobStop(job)
   return nil
}
Clone this wiki locally