77 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package main
 | ||
| 
 | ||
| import (
 | ||
| 	"context"
 | ||
| 	"flag"
 | ||
| 	"fmt"
 | ||
| 	"hm-server/app/main/api/internal/config"
 | ||
| 	"hm-server/app/main/api/internal/handler"
 | ||
| 	"hm-server/app/main/api/internal/middleware"
 | ||
| 	"hm-server/app/main/api/internal/queue"
 | ||
| 	"hm-server/app/main/api/internal/service"
 | ||
| 	"hm-server/app/main/api/internal/svc"
 | ||
| 	"os"
 | ||
| 
 | ||
| 	"github.com/zeromicro/go-zero/core/logx"
 | ||
| 
 | ||
| 	"github.com/zeromicro/go-zero/core/conf"
 | ||
| 	"github.com/zeromicro/go-zero/rest"
 | ||
| )
 | ||
| 
 | ||
| func main() {
 | ||
| 	// 读取环境变量 ENV,默认为 "prod"
 | ||
| 	env := os.Getenv("ENV")
 | ||
| 	if env == "" {
 | ||
| 		env = "production"
 | ||
| 	}
 | ||
| 
 | ||
| 	// 根据 ENV 加载不同的配置文件
 | ||
| 	var defaultConfigFile string
 | ||
| 	if env == "development" {
 | ||
| 		defaultConfigFile = "app/main/api/etc/main.dev.yaml"
 | ||
| 	} else {
 | ||
| 		defaultConfigFile = "etc/main.yaml"
 | ||
| 	}
 | ||
| 	configFile := flag.String("f", defaultConfigFile, "the config file")
 | ||
| 	flag.Parse()
 | ||
| 
 | ||
| 	var c config.Config
 | ||
| 	conf.MustLoad(*configFile, &c)
 | ||
| 
 | ||
| 	svcContext := svc.NewServiceContext(c)
 | ||
| 	defer svcContext.Close()
 | ||
| 
 | ||
| 	// 启动 asynq 消费者
 | ||
| 	go func() {
 | ||
| 		ctx := context.Background()
 | ||
| 		// 初始化 cron job 或异步任务队列
 | ||
| 		asynq := queue.NewCronJob(ctx, svcContext)
 | ||
| 		mux := asynq.Register()
 | ||
| 
 | ||
| 		// 启动 asynq 消费者
 | ||
| 		if err := svcContext.AsynqServer.Run(mux); err != nil {
 | ||
| 			logx.WithContext(ctx).Errorf("异步任务启动失败: %v", err)
 | ||
| 			os.Exit(1)
 | ||
| 		}
 | ||
| 		fmt.Println("异步任务启动!!!")
 | ||
| 	}()
 | ||
| 
 | ||
| 	server := rest.MustNewServer(c.RestConf)
 | ||
| 	server.Use(middleware.GlobalSourceInterceptor)
 | ||
| 	defer server.Stop()
 | ||
| 
 | ||
| 	handler.RegisterHandlers(server, svcContext)
 | ||
| 	
 | ||
| 	// 自动注册API到数据库
 | ||
| 	apiRegistry := service.NewApiRegistryService(svcContext.AdminApiModel)
 | ||
| 	routes := server.Routes()
 | ||
| 	if err := apiRegistry.RegisterAllApis(context.Background(), routes); err != nil {
 | ||
| 		logx.Errorf("API注册失败: %v", err)
 | ||
| 	} else {
 | ||
| 		logx.Infof("API注册成功,共注册 %d 个路由", len(routes))
 | ||
| 	}
 | ||
| 	
 | ||
| 	fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)
 | ||
| 	server.Start()
 | ||
| }
 |