MCPcopy Create free account
hub / github.com/GoSimplicity/LinkMe / Init

Function Init

cmd/main.go:24–84  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

22}
23
24func Init() {
25 config.InitViper()
26 cmd := ioc.InitWebServer()
27 rootCtx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
28 defer stop()
29
30 metricsServer := startMetricsServer(viper.GetString("metrics.addr"))
31
32 go func() {
33 if err := cmd.Scheduler.RegisterTimedTasks(); err != nil {
34 zap.L().Fatal("注册定时任务失败", zap.Error(err))
35 }
36
37 if err := cmd.Scheduler.Run(); err != nil {
38 zap.L().Fatal("启动定时任务失败", zap.Error(err))
39 }
40 }()
41
42 for _, s := range cmd.Consumer {
43 go func(consumer events.Consumer) {
44 if err := consumer.Start(rootCtx); err != nil && !errors.Is(err, context.Canceled) {
45 zap.L().Fatal("启动消费者失败", zap.Error(err))
46 }
47 }(s)
48 }
49
50 go func() {
51 mux := cmd.Routes.RegisterHandlers()
52 if err := cmd.Asynq.Run(mux); err != nil {
53 zap.L().Fatal("启动异步任务服务器失败", zap.Error(err))
54 }
55 }()
56
57 appServer := &http.Server{
58 Addr: viper.GetString("server.addr"),
59 Handler: cmd.Server,
60 }
61
62 go func() {
63 if err := appServer.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
64 zap.L().Fatal("启动Web服务器失败", zap.Error(err))
65 }
66 }()
67
68 <-rootCtx.Done()
69 zap.L().Info("正在关闭服务器...")
70
71 cmd.Asynq.Shutdown()
72 cmd.Scheduler.Stop()
73
74 shutdownCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
75 defer cancel()
76 if err := metricsServer.Shutdown(shutdownCtx); err != nil {
77 zap.L().Error("关闭监控服务器失败", zap.Error(err))
78 }
79 if err := appServer.Shutdown(shutdownCtx); err != nil {
80 zap.L().Error("关闭Web服务器失败", zap.Error(err))
81 }

Callers 1

mainFunction · 0.85

Calls 8

InitViperFunction · 0.92
InitWebServerFunction · 0.92
startMetricsServerFunction · 0.85
RegisterTimedTasksMethod · 0.80
RunMethod · 0.80
RegisterHandlersMethod · 0.80
StopMethod · 0.80
StartMethod · 0.65

Tested by

no test coverage detected