简介

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

概述

程序入口

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

HTTP

在main.go启动HTTP服务

  1. ## 配置文件路径,进程号路径,服务预启动回调函数,路由注册回调函数
  2. server.StartHttp(opts.ConfFile, pidFile, bootstrap.Bootstrap, routes.RegisterRoute)
  3. ## 具体启动逻辑
  4. func StartHttp(confFile, pidFile string, boot func(config *config.Config) error, registerRoute func(*gin.Engine)) error {
  5. //加载配置文件
  6. conf, err := config.Load(confFile)
  7. if err != nil {
  8. return err
  9. }
  10. //初始化服务信息
  11. err = initServer()
  12. if err != nil {
  13. return fmt.Errorf("init server failed, %s", err.Error())
  14. }
  15. //容器初始化
  16. err = boot(conf)
  17. if err != nil {
  18. return fmt.Errorf("container ini failed %s", err.Error())
  19. }
  20. //配置路由引擎
  21. engine := gin.Default()
  22. registerRoute(engine)
  23. addr := conf.Api.Host + ":" + strconv.Itoa(conf.Api.Port)
  24. runEngine(engine, addr, pidFile)
  25. go func() {
  26. srv.stop <- true
  27. }()
  28. //等待停止信号
  29. waitStop()
  30. return nil
  31. }

任务调度

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

  1. ## 配置文件路径,进程号路径,服务预启动回调函数,任务注册回调函数
  2. server.StartConsole(opts.ConfFile, pidFile, bootstrap.Bootstrap, console.RegisterSchedule)
  3. ## 具体启动逻辑
  4. func StartConsole(confFile, pidFile string, boot func(*config.Config) error, registerSchedule func(*cron.Cron)) error {
  5. //加载配置文件
  6. conf, err := config.Load(confFile)
  7. if err != nil {
  8. return err
  9. }
  10. //初始化服务信息
  11. err = initServer()
  12. if err != nil {
  13. return fmt.Errorf("init server failed, %s", err.Error())
  14. }
  15. //容器初始化
  16. err = boot(conf)
  17. if err != nil {
  18. return fmt.Errorf("container ini failed %s", err.Error())
  19. }
  20. //注册Cron执行计划
  21. cronEngine := cron.New()
  22. registerSchedule(cronEngine)
  23. cronEngine.Start()
  24. //写pid文件
  25. writePidFile(pidFile)
  26. //注册信号量
  27. registerSignal()
  28. //等待停止信号
  29. waitConsoleStop(cronEngine)
  30. return nil
  31. }

队列调度

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

  1. ## 配置文件路径,进程号路径,服务预启动回调函数,Workder注册回调函数
  2. server.StartJob(opts.ConfFile, pidFile, bootstrap.Bootstrap, jobs.RegisterWorker)
  3. ## 具体启动逻辑
  4. func StartJob(confFile, pidFile string, boot func(*config.Config) error, registerWorker func(*work.Job)) error {
  5. //加载配置文件
  6. conf, err := config.Load(confFile)
  7. if err != nil {
  8. return err
  9. }
  10. //初始化服务信息
  11. err = initServer()
  12. if err != nil {
  13. return fmt.Errorf("init server failed, %s", err.Error())
  14. }
  15. //容器初始化
  16. err = boot(conf)
  17. if err != nil {
  18. return fmt.Errorf("container ini failed %s", err.Error())
  19. }
  20. //注册Job Worker
  21. job := work.New()
  22. registerWorker(job)
  23. job.Start()
  24. //写pid文件
  25. writePidFile(pidFile)
  26. //注册信号量
  27. registerSignal()
  28. //等待停止信号
  29. waitJobStop(job)
  30. return nil
  31. }