main.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package main
  2. import (
  3. "context"
  4. "flag"
  5. "os"
  6. nacosConfig "git.ikuban.com/server/kratos-nacos/config"
  7. "git.ikuban.com/server/kratos-nacos/registry"
  8. "github.com/go-kratos/kratos/v2/config/file"
  9. "git.ikuban.com/server/yaml"
  10. "github.com/go-kratos/kratos-layout/internal/conf"
  11. "github.com/go-kratos/kratos/v2"
  12. "github.com/go-kratos/kratos/v2/config"
  13. "github.com/go-kratos/kratos/v2/log"
  14. "github.com/go-kratos/kratos/v2/transport/grpc"
  15. "github.com/go-kratos/kratos/v2/transport/http"
  16. )
  17. // go build -ldflags "-X main.Version=x.y.z"
  18. var (
  19. // Name is the name of the compiled software.
  20. name string
  21. // Version is the version of the compiled software.
  22. Version string
  23. // flagconf is the config flag.
  24. flagconf string
  25. group string
  26. namespace string
  27. configSource string
  28. )
  29. func init() {
  30. flag.StringVar(&flagconf, "f", "", "config path, eg: -f configs/config.yaml")
  31. if configSource == "" {
  32. configSource = "http://wxbot-cfg.cpshelp.cn:80"
  33. }
  34. if group == "" {
  35. group = "wxbot"
  36. }
  37. if os.Getenv("WXBOT_GROUP") != "" {
  38. group = os.Getenv("WXBOT_GROUP")
  39. }
  40. if namespace == "" {
  41. namespace = "fbdb8990-cd74-4703-a14f-8a10c3290270"
  42. }
  43. if os.Getenv("WXBOT_NAMESPACE") != "" {
  44. namespace = os.Getenv("WXBOT_NAMESPACE")
  45. }
  46. if os.Getenv("WXBOT_CONFIG_SOURCE") != "" {
  47. configSource = os.Getenv("WXBOT_CONFIG_SOURCE")
  48. }
  49. }
  50. func newApp(ctx context.Context, logger log.Logger, r *registry.Registry, hs *http.Server, gs *grpc.Server) *kratos.App {
  51. opts := []kratos.Option{
  52. kratos.Name(name),
  53. kratos.Version(Version),
  54. kratos.Metadata(map[string]string{}),
  55. kratos.Logger(logger),
  56. kratos.Server(
  57. hs,
  58. gs,
  59. ),
  60. kratos.Context(ctx),
  61. }
  62. if r != nil {
  63. opts = append(opts, kratos.Registrar(r))
  64. }
  65. err := postInitService()
  66. if err != nil {
  67. panic(err)
  68. }
  69. return kratos.New(
  70. opts...,
  71. )
  72. }
  73. func main() {
  74. flag.Parse()
  75. ctx := context.Background()
  76. logger := log.NewStdLogger(os.Stdout)
  77. logger = log.With(logger, "caller", log.Caller(4), "ts", log.DefaultTimestamp)
  78. var confSource config.Source
  79. if flagconf != "" {
  80. confSource = file.NewSource(flagconf)
  81. } else {
  82. confSource = nacosConfig.NewSource(configSource,
  83. namespace,
  84. nacosConfig.Group(group),
  85. nacosConfig.DataID(name),
  86. )
  87. }
  88. bc := new(conf.Bootstrap)
  89. c := config.New(
  90. config.WithSource(
  91. confSource,
  92. ),
  93. config.WithDecoder(func(kv *config.KeyValue, v map[string]interface{}) error {
  94. return yaml.Unmarshal(kv.Value, bc)
  95. }),
  96. )
  97. if err := c.Load(); err != nil {
  98. panic(err)
  99. }
  100. if bc.Server.Registrar == nil {
  101. bc.Server.Registrar = &conf.Registrar{}
  102. }
  103. if bc.Server.Registrar.Namespace == "" {
  104. bc.Server.Registrar.Namespace = namespace
  105. }
  106. if bc.Server.Registrar.Group == "" {
  107. bc.Server.Registrar.Group = group
  108. }
  109. if bc.Server.Registrar.Endpoint == "" {
  110. bc.Server.Registrar.Endpoint = configSource
  111. }
  112. if bc.TraceConf == nil {
  113. bc.TraceConf = new(conf.TraceConf)
  114. }
  115. app, cleanup, err := initApp(ctx, bc, logger)
  116. if err != nil {
  117. panic(err)
  118. }
  119. defer cleanup()
  120. // start and wait for stop signal
  121. if err = app.Run(); err != nil {
  122. panic(err)
  123. }
  124. }
  125. // postInitService 在data和service初始化的之后的执行的方法
  126. func postInitService() error {
  127. return nil
  128. }