25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

148 lines
5.2KB

  1. package main
  2. import (
  3. "context"
  4. "flag"
  5. "fmt"
  6. "github.com/go-kit/kit/log"
  7. kitprometheus "github.com/go-kit/kit/metrics/prometheus"
  8. kitzipkin "github.com/go-kit/kit/tracing/zipkin"
  9. "github.com/openzipkin/zipkin-go"
  10. zipkinhttp "github.com/openzipkin/zipkin-go/reporter/http"
  11. stdprometheus "github.com/prometheus/client_golang/prometheus"
  12. "github.com/tal-tech/go-zero/core/logx"
  13. "gorm.io/gorm"
  14. "job_risk_third/config"
  15. "job_risk_third/discover"
  16. "job_risk_third/internal/endpoints"
  17. "job_risk_third/internal/services"
  18. "job_risk_third/internal/transports"
  19. "job_risk_third/loggers"
  20. "job_risk_third/model"
  21. "net/http"
  22. "os"
  23. "os/signal"
  24. "syscall"
  25. )
  26. var configFile = flag.String("f", "config/job_risk_third.json", "the config file")
  27. func main() {
  28. flag.Parse()
  29. errChan := make(chan error)
  30. ctx := context.Background()
  31. config.Cfg = config.LoadConfig(*configFile)
  32. logConf := logx.LogConf{
  33. ServiceName: config.Cfg.Get("name").(string),
  34. Mode: config.Cfg.Get("log.mode").(string),
  35. Path: config.Cfg.Get("log.path").(string),
  36. Level: config.Cfg.Get("log.level").(string),
  37. Compress: config.Cfg.Get("log.compress").(bool),
  38. KeepDays: config.Cfg.GetInt("log.keep_days"),
  39. StackCooldownMillis: config.Cfg.GetInt("log.stack_cooldown_millis"),
  40. }
  41. zipkinConf := config.ZipkinConfig{
  42. HostConfig: config.HostConfig{
  43. Address: config.Cfg.Get("zipkin.host.address").(string),
  44. Port: config.Cfg.GetInt("zipkin.host.port"),
  45. },
  46. ZipkinURL: config.Cfg.Get("zipkin.url").(string),
  47. }
  48. consulConf := config.ConsulConfig{
  49. HostConfig: config.HostConfig{
  50. Address: config.Cfg.Get("consul.host.address").(string),
  51. Port: config.Cfg.GetInt("consul.host.port"),
  52. },
  53. ServiceId: config.Cfg.Get("consul.service_id").(string),
  54. }
  55. logx.MustSetup(logConf)
  56. var logger = loggers.New()
  57. dbConf := &gorm.Config{
  58. SkipDefaultTransaction: false,
  59. Logger: logger,
  60. }
  61. //初始化数据库和连接缓存
  62. model.New(config.Cfg.GetString("connstring"), dbConf)
  63. fieldKeys := []string{"method"}
  64. requestCount := kitprometheus.NewCounterFrom(stdprometheus.CounterOpts{
  65. Namespace: config.Cfg.Get("name").(string),
  66. Subsystem: config.Cfg.Get("name").(string) + "_service",
  67. Name: "request_count",
  68. Help: "收到的请求数",
  69. }, fieldKeys)
  70. requestLatency := kitprometheus.NewSummaryFrom(stdprometheus.SummaryOpts{
  71. Namespace: config.Cfg.Get("name").(string),
  72. Subsystem: config.Cfg.Get("name").(string) + "_service",
  73. Name: "request_latency",
  74. Help: "请求的总持续时间(以微秒为单位)",
  75. }, fieldKeys)
  76. var zipkinTracer *zipkin.Tracer
  77. {
  78. var (
  79. err error
  80. hostPort = fmt.Sprintf("%s:%d", zipkinConf.Address, zipkinConf.Port)
  81. serviceName = config.Cfg.Get("name").(string) + "_service"
  82. useNoopTracer = zipkinConf.ZipkinURL == ""
  83. reporters = zipkinhttp.NewReporter(zipkinConf.ZipkinURL)
  84. )
  85. defer reporters.Close()
  86. zEP, _ := zipkin.NewEndpoint(serviceName, hostPort)
  87. zipkinTracer, err = zipkin.NewTracer(
  88. reporters, zipkin.WithLocalEndpoint(zEP), zipkin.WithNoopTracer(useNoopTracer),
  89. )
  90. if err != nil {
  91. logx.Error(err)
  92. os.Exit(1)
  93. }
  94. logx.Slow("Zipkin", "type", "Native", "URL", zipkinConf.ZipkinURL)
  95. }
  96. go func() {
  97. c := make(chan os.Signal, 1)
  98. signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
  99. errChan <- fmt.Errorf("%s", <-c)
  100. }()
  101. var svr services.JobRiskThirdServices
  102. svr = services.JobRiskThirdService{}
  103. svr = services.Metrics(requestCount, requestLatency)(svr)
  104. pushFeatureDealEndpoint := endpoints.MakePushFeatureDealEndpoint(svr)
  105. pushFeatureDealEndpoint = kitzipkin.TraceEndpoint(zipkinTracer, "push_feature_deal")(pushFeatureDealEndpoint)
  106. pushUserInfoEndpoint := endpoints.MakePushUserInfoEndpoint(svr)
  107. pushUserInfoEndpoint = kitzipkin.TraceEndpoint(zipkinTracer, "push_user_info")(pushUserInfoEndpoint)
  108. pushFeatureInfoEndpoint := endpoints.MakePushFeatureInfoEndpoint(svr)
  109. pushFeatureInfoEndpoint = kitzipkin.TraceEndpoint(zipkinTracer, "push_feature_info")(pushFeatureInfoEndpoint)
  110. //创建健康检查的Endpoint
  111. healthEndpoint := endpoints.MakeHealthCheckEndpoint(svr)
  112. healthEndpoint = kitzipkin.TraceEndpoint(zipkinTracer, "third_health_endpoint")(healthEndpoint)
  113. endpts := endpoints.JobRiskThirdEndpoint{
  114. PushFeatureDealEndpoint: pushFeatureDealEndpoint,
  115. PushUserInfoEndpoint: pushUserInfoEndpoint,
  116. PushFeatureInfoEndpoint: pushFeatureInfoEndpoint,
  117. HealthCheckEndpoint: healthEndpoint,
  118. }
  119. r := transports.MakeHttpHandler(ctx, endpts, zipkinTracer)
  120. var l log.Logger
  121. {
  122. l = log.NewLogfmtLogger(os.Stderr)
  123. l = log.With(l, "ts", log.DefaultTimestampUTC)
  124. l = log.With(l, "caller", log.DefaultCaller)
  125. }
  126. //创建注册对象
  127. registar := discover.Register(consulConf.Address, fmt.Sprintf("%d", consulConf.Port), config.Cfg.Get("http.domain.address").(string),
  128. fmt.Sprintf("%d", config.Cfg.GetInt("http.domain.port")), consulConf.ServiceId, config.Cfg.Get("name").(string), l)
  129. go func() {
  130. fmt.Printf("Http Server start at port %.f \n", config.Cfg.Get("http.host.port"))
  131. //启动前执行注册
  132. registar.Register()
  133. errChan <- http.ListenAndServe(fmt.Sprintf(":%.f", config.Cfg.Get("http.host.port")), r)
  134. }()
  135. err := <-errChan
  136. //服务退出取消注册
  137. registar.Deregister()
  138. logx.Error(err)
  139. }