服务启动项Hook


Hook顾名思义,为服务提供了一个插入自定义功能的入口,目前已有两个时间点的功能注册:服务启动之前服务停止之后,当然只要符合使用规范,也可以定义其他注册时机!

包路径

  1. github.com/tal-tech/hera/bootstrap

定义

服务启动之前所执行函数的类型定义

  1. type BeforeServerStartFunc func() error

服务停止之后所执行函数的类型定义

  1. type AfterServerStopFunc func()

功能列表

  1. //初始化日志库
  2. func InitLoggerWithConf(sections ...string) BeforeServerStartFunc
  3. //设置日志处理插件,适配网校trace日志格式
  4. func InitTraceLogger(department, version string) BeforeServerStartFunc
  5. //初始化打点库
  6. func InitPerfutil() BeforeServerStartFunc
  7. //设置fd为所允许的最大值
  8. func GrowMaxFd() BeforeServerStartFunc
  9. //初始化性能分析web服务
  10. func InitPprof() BeforeServerStartFunc

使用案例

假定我们写一个服务MyServer ,有两个属性切片属性beforeFuncs, afterFuncs 和两个添加hook函数的函数

  1. type MyServer struct {
  2. beforeFuncs []bootstrap.BeforeServerStartFunc
  3. afterFuncs []bootstrap.AfterServerStopFunc
  4. }
  5. //AddBeforeServerStartFunc add before function
  6. func (srv *MyServer) AddBeforeServerStartFunc(fns ...bootstrap.BeforeServerStartFunc) {
  7. for _, fn := range fns {
  8. srv.beforeFuncs = append(srv.beforeFuncs, fn)
  9. }
  10. }
  11. //AddAfterServerStopFunc add after function
  12. func (srv *MyServer) AddAfterServerStopFunc(fns ...bootstrap.AfterServerStopFunc) {
  13. for _, fn := range fns {
  14. srv.afterFuncs = append(srv.afterFuncs, fn)
  15. }
  16. }
  17. //服务执行入口
  18. func (srv *MyServer) Serve() error {
  19. //服务执行前触发
  20. for _, fn := range srv.beforeFuncs {
  21. err := fn()
  22. if err != nil {
  23. return err
  24. }
  25. }
  26. //todo业务实现
  27. //服务退出后触发
  28. for _, fn := range srv.afterFuncs {
  29. fn()
  30. }
  31. }