main.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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 group == "" {
  32. group = "kq"
  33. }
  34. if os.Getenv("KQ_GROUP") != "" {
  35. group = os.Getenv("KQ_GROUP")
  36. }
  37. if namespace == "" {
  38. namespace = "bb20f160-702c-4ffa-8b5f-9d13ddd70178"
  39. }
  40. if os.Getenv("KQ_NAMESPACE") != "" {
  41. namespace = os.Getenv("KQ_NAMESPACE")
  42. }
  43. if os.Getenv("KQ_CONFIG_SOURCE") != "" {
  44. configSource = os.Getenv("KQ_CONFIG_SOURCE")
  45. }
  46. }
  47. func newApp(ctx context.Context, logger log.Logger, r *registry.Registry, hs *http.Server, gs *grpc.Server) *kratos.App {
  48. opts := []kratos.Option{
  49. kratos.Name(name),
  50. kratos.Version(Version),
  51. kratos.Metadata(map[string]string{}),
  52. kratos.Logger(logger),
  53. kratos.Server(
  54. hs,
  55. gs,
  56. ),
  57. kratos.Context(ctx),
  58. }
  59. if r != nil {
  60. opts = append(opts, kratos.Registrar(r))
  61. }
  62. err := postInitService()
  63. if err != nil {
  64. panic(err)
  65. }
  66. return kratos.New(
  67. opts...,
  68. )
  69. }
  70. func main() {
  71. flag.Parse()
  72. ctx := context.Background()
  73. logger := log.NewStdLogger(os.Stdout)
  74. logger = log.With(logger, "caller", log.Caller(4), "ts", log.DefaultTimestamp)
  75. var confSource config.Source
  76. if flagconf != "" {
  77. confSource = file.NewSource(flagconf)
  78. } else {
  79. confSource = nacosConfig.NewSource(configSource,
  80. namespace,
  81. nacosConfig.Group(group),
  82. nacosConfig.DataID(name),
  83. )
  84. }
  85. bc := new(conf.Bootstrap)
  86. c := config.New(
  87. config.WithSource(
  88. confSource,
  89. ),
  90. config.WithDecoder(func(kv *config.KeyValue, v map[string]interface{}) error {
  91. return yaml.Unmarshal(kv.Value, bc)
  92. }),
  93. )
  94. if err := c.Load(); err != nil {
  95. panic(err)
  96. }
  97. if bc.Server.Registrar == nil {
  98. bc.Server.Registrar = &conf.Registrar{}
  99. }
  100. if bc.Server.Registrar.Namespace == "" {
  101. bc.Server.Registrar.Namespace = namespace
  102. }
  103. if bc.Server.Registrar.Group == "" {
  104. bc.Server.Registrar.Group = group
  105. }
  106. if bc.Server.Registrar.Endpoint == "" {
  107. bc.Server.Registrar.Endpoint = configSource
  108. }
  109. if bc.TraceConf == nil {
  110. bc.TraceConf = new(conf.TraceConf)
  111. }
  112. app, cleanup, err := initApp(ctx, bc, logger)
  113. if err != nil {
  114. panic(err)
  115. }
  116. defer cleanup()
  117. // start and wait for stop signal
  118. if err = app.Run(); err != nil {
  119. panic(err)
  120. }
  121. }
  122. // postInitService 在data和service初始化的之后的执行的方法
  123. func postInitService() error {
  124. return nil
  125. }