|
|
@@ -1,92 +1,38 @@
|
|
1
|
1
|
package main
|
|
2
|
2
|
|
|
3
|
3
|
import (
|
|
4
|
|
- "log"
|
|
5
|
4
|
"net/http"
|
|
6
|
|
- "os"
|
|
7
|
|
- "os/signal"
|
|
8
|
|
- "syscall"
|
|
9
|
5
|
|
|
10
|
|
- "git.x2erp.com/qdy/go-base/config"
|
|
|
6
|
+ "git.x2erp.com/qdy/go-base/bootstraps"
|
|
11
|
7
|
"git.x2erp.com/qdy/go-base/middleware"
|
|
12
|
|
- "git.x2erp.com/qdy/go-base/myservice"
|
|
13
|
8
|
"git.x2erp.com/qdy/go-db/factory/database"
|
|
14
|
9
|
"git.x2erp.com/qdy/go-db/myhandle"
|
|
15
|
10
|
"git.x2erp.com/qdy/go-svc-agent/functions"
|
|
16
|
11
|
"go-micro.dev/v4/web"
|
|
17
|
12
|
)
|
|
18
|
13
|
|
|
19
|
|
-func main() {
|
|
20
|
|
- cfg, err := config.GetConfig()
|
|
21
|
|
- if err != nil {
|
|
22
|
|
- log.Printf("failed to load config: %v", err)
|
|
23
|
|
- return
|
|
24
|
|
- }
|
|
25
|
|
-
|
|
26
|
|
- serviceConfig := cfg.GetService()
|
|
27
|
|
-
|
|
28
|
|
- log.Printf("Service Port: %d", serviceConfig.Port)
|
|
29
|
|
- log.Printf("Service IdleTimeout: %d", serviceConfig.IdleTimeout)
|
|
30
|
|
- log.Printf("Service ReadTimeout: %d", serviceConfig.ReadTimeout)
|
|
31
|
|
- log.Printf("Service WriteTimeout: %d", serviceConfig.WriteTimeout)
|
|
32
|
|
- log.Printf("Service TrustedProxies: %s", serviceConfig.TrustedProxies)
|
|
33
|
|
-
|
|
34
|
|
- log.Printf("Using database type: %s", cfg.GetDatabase().Type)
|
|
35
|
|
- log.Printf("Database host: %s:%d", cfg.GetDatabase().Host, cfg.GetDatabase().Port)
|
|
36
|
|
- log.Printf("Database name: %s", cfg.GetDatabase().Database)
|
|
37
|
|
- log.Println("Database connection test passed!")
|
|
38
|
|
-
|
|
39
|
|
- // 启动微服务
|
|
40
|
|
- startMicroService(cfg)
|
|
41
|
|
-}
|
|
42
|
|
-
|
|
43
|
|
-// 启动微服务
|
|
44
|
|
-func startMicroService(cfg config.IConfig) {
|
|
45
|
|
-
|
|
46
|
|
- serviceConfig := cfg.GetService()
|
|
47
|
|
-
|
|
48
|
|
- // 初始化数据库
|
|
49
|
|
- dbFactory, err := database.GetDBFactory()
|
|
50
|
|
- if err != nil {
|
|
51
|
|
- log.Fatalf("Failed to create DB factory: %v", err)
|
|
52
|
|
- }
|
|
53
|
|
- defer func() {
|
|
54
|
|
- if err := dbFactory.Close(); err != nil {
|
|
55
|
|
- log.Printf("Database close error: %v", err)
|
|
56
|
|
- }
|
|
57
|
|
- }()
|
|
|
14
|
+var (
|
|
|
15
|
+ serviceName = "svc-agent"
|
|
|
16
|
+ serviceVersion = "1.0.0"
|
|
|
17
|
+)
|
|
58
|
18
|
|
|
59
|
|
- // 设置优雅关闭
|
|
60
|
|
- setupGracefulShutdown(dbFactory)
|
|
|
19
|
+func main() {
|
|
61
|
20
|
|
|
62
|
|
- webService := myservice.StartStandalone(cfg)
|
|
|
21
|
+ // 创建服务启动器
|
|
|
22
|
+ bootstrapper := bootstraps.NewServiceBootstrapper(serviceName, serviceVersion)
|
|
63
|
23
|
|
|
64
|
|
- // 注册HTTP路由到webService
|
|
65
|
|
- registerRoutes(webService, dbFactory)
|
|
|
24
|
+ //加载配置
|
|
|
25
|
+ bootstrapper.InitConfig()
|
|
66
|
26
|
|
|
67
|
|
- // 等待服务运行
|
|
68
|
|
- log.Printf("Service started successfully")
|
|
69
|
|
- log.Printf(" • Service: %s", serviceConfig.ServiceName)
|
|
70
|
|
- log.Printf(" • Port: %d", serviceConfig.Port)
|
|
71
|
|
- log.Printf(" • Mode: %s", getServiceMode(cfg))
|
|
|
27
|
+ //构建数据库工厂
|
|
|
28
|
+ bootstrapper.InitDatabase()
|
|
|
29
|
+ defer bootstrapper.CleanupDatabase()
|
|
72
|
30
|
|
|
73
|
|
- // 保持主程序运行
|
|
74
|
|
- select {}
|
|
75
|
|
-}
|
|
|
31
|
+ //dbFactory := bootstrapper.DbFactory
|
|
76
|
32
|
|
|
77
|
|
-// 判断是否使用注册中心
|
|
78
|
|
-func shouldUseRegistry(cfg config.IConfig) bool {
|
|
79
|
|
- microConfig := cfg.GetMicro()
|
|
80
|
|
- // 如果有配置注册中心地址且不为空,则使用注册中心
|
|
81
|
|
- return microConfig.RegistryAddress != ""
|
|
82
|
|
-}
|
|
|
33
|
+ // 启动服务,传入路由注册函数
|
|
|
34
|
+ bootstrapper.Run(registerRoutes)
|
|
83
|
35
|
|
|
84
|
|
-// 获取服务模式描述
|
|
85
|
|
-func getServiceMode(cfg config.IConfig) string {
|
|
86
|
|
- if shouldUseRegistry(cfg) {
|
|
87
|
|
- return "With Service Discovery"
|
|
88
|
|
- }
|
|
89
|
|
- return "Standalone"
|
|
90
|
36
|
}
|
|
91
|
37
|
|
|
92
|
38
|
// 注册所有路由
|
|
|
@@ -107,19 +53,3 @@ func registerRoutes(webService web.Service, dbFactory *database.DBFactory) {
|
|
107
|
53
|
myhandle.QueryHandlerBytes(w, r, dbFactory, functions.QueryPositionalToCSV)
|
|
108
|
54
|
})))
|
|
109
|
55
|
}
|
|
110
|
|
-
|
|
111
|
|
-// 设置优雅关闭
|
|
112
|
|
-func setupGracefulShutdown(dbFactory *database.DBFactory) {
|
|
113
|
|
- signalCh := make(chan os.Signal, 1)
|
|
114
|
|
- signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM)
|
|
115
|
|
-
|
|
116
|
|
- go func() {
|
|
117
|
|
- <-signalCh
|
|
118
|
|
- log.Println("\nReceived shutdown signal, closing database connection...")
|
|
119
|
|
- if err := dbFactory.Close(); err != nil {
|
|
120
|
|
- log.Printf("Error closing database: %v", err)
|
|
121
|
|
- }
|
|
122
|
|
- log.Println("Database connection closed gracefully")
|
|
123
|
|
- os.Exit(0)
|
|
124
|
|
- }()
|
|
125
|
|
-}
|