| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- package main
-
- import (
- "log"
- "net/http"
- "os"
- "os/signal"
- "syscall"
-
- "git.x2erp.com/qdy/go-base/config"
- "git.x2erp.com/qdy/go-base/micro"
- "git.x2erp.com/qdy/go-base/mymiddleware"
- "git.x2erp.com/qdy/go-db/factory/database"
- "git.x2erp.com/qdy/go-db/myhandle"
- "git.x2erp.com/qdy/go-service-agent/functions"
- "go-micro.dev/v4/web"
- )
-
- func main() {
- cfg := config.GetConfig()
- serviceConfig := cfg.GetService()
-
- log.Printf("Service Port: %d", serviceConfig.Port)
- log.Printf("Service IdleTimeout: %d", serviceConfig.IdleTimeout)
- log.Printf("Service ReadTimeout: %d", serviceConfig.ReadTimeout)
- log.Printf("Service WriteTimeout: %d", serviceConfig.WriteTimeout)
- log.Printf("Service TrustedProxies: %s", serviceConfig.TrustedProxies)
-
- log.Printf("Using database type: %s", cfg.GetDatabase().Type)
- log.Printf("Database host: %s:%d", cfg.GetDatabase().Host, cfg.GetDatabase().Port)
- log.Printf("Database name: %s", cfg.GetDatabase().Database)
- log.Println("Database connection test passed!")
-
- // 启动微服务
- startMicroService()
- }
-
- // 启动微服务
- func startMicroService() {
- cfg := config.GetConfig()
- serviceConfig := cfg.GetService()
-
- // 初始化数据库
- dbFactory, err := database.GetDBFactory()
- if err != nil {
- log.Fatalf("Failed to create DB factory: %v", err)
- }
- defer func() {
- if err := dbFactory.Close(); err != nil {
- log.Printf("Database close error: %v", err)
- }
- }()
-
- // 设置优雅关闭
- setupGracefulShutdown(dbFactory)
-
- webService := micro.StartStandalone(cfg)
-
- // 注册HTTP路由到webService
- registerRoutes(webService, dbFactory)
-
- // 等待服务运行
- log.Printf("Service started successfully")
- log.Printf(" • Service: %s", serviceConfig.ServiceName)
- log.Printf(" • Port: %d", serviceConfig.Port)
- log.Printf(" • Mode: %s", getServiceMode(cfg))
-
- // 保持主程序运行
- select {}
- }
-
- // 判断是否使用注册中心
- func shouldUseRegistry(cfg config.IConfig) bool {
- microConfig := cfg.GetMicro()
- // 如果有配置注册中心地址且不为空,则使用注册中心
- return microConfig.RegistryAddress != ""
- }
-
- // 获取服务模式描述
- func getServiceMode(cfg config.IConfig) string {
- if shouldUseRegistry(cfg) {
- return "With Service Discovery"
- }
- return "Standalone"
- }
-
- // 注册所有路由
- func registerRoutes(webService web.Service, dbFactory *database.DBFactory) {
-
- // 查询接口 - JSON
- webService.Handle("/api/query/json", mymiddleware.JWTAuthMiddleware(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- myhandle.QueryHandlerJson(w, r, dbFactory, functions.QueryToJSON)
- })))
-
- // 查询接口 - CSV
- webService.Handle("/api/query/csv", mymiddleware.JWTAuthMiddleware(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- myhandle.QueryHandlerBytes(w, r, dbFactory, functions.QueryToCSV)
- })))
-
- // 查询接口 - CSV with positional params
- webService.Handle("/api/query/csv/param", mymiddleware.JWTAuthMiddleware(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- myhandle.QueryHandlerBytes(w, r, dbFactory, functions.QueryPositionalToCSV)
- })))
- }
-
- // 设置优雅关闭
- func setupGracefulShutdown(dbFactory *database.DBFactory) {
- signalCh := make(chan os.Signal, 1)
- signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM)
-
- go func() {
- <-signalCh
- log.Println("\nReceived shutdown signal, closing database connection...")
- if err := dbFactory.Close(); err != nil {
- log.Printf("Error closing database: %v", err)
- }
- log.Println("Database connection closed gracefully")
- os.Exit(0)
- }()
- }
|