- 简介
- 概述
- 程序入口
- HTTP
- 任务调度
- 队列调度
简介
在「日常生活」中 使用任何工具时,如果理解了该工具的工作原理。那么用起来就会更加得心应手。应用开发也是如此,当你能真正懂得一个功能背后实现原理时,用起来会更加顺手,方便。文档存在目的是为了让你更加清晰地了解 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 Workerjob := work.New()registerWorker(job)job.Start()//写pid文件writePidFile(pidFile)//注册信号量registerSignal()//等待停止信号waitJobStop(job)return nil}
