package main import ( "context" "gateway/internal/cache" "gateway/internal/config" _ "gateway/internal/models" "gateway/internal/otelTrace" "gateway/internal/proxy" _ "gateway/internal/routers" "gateway/internal/schema/query" "gateway/internal/service" _ "gateway/internal/service/message" "gateway/internal/service/notify" "gateway/internal/service/supplier/third_party" "gateway/internal/service/supplier/third_party/queue" "gateway/internal/utils" "github.com/beego/beego/v2/server/web" _ "github.com/go-sql-driver/mysql" "log" _ "net/http/pprof" "time" ) func main() { config.GetMQAddress() // 初始化代理池 if err := proxy.InitProxyPool(); err != nil { log.Printf("初始化代理池失败: %v", err) return } // 初始化 OpenTelemetry cleanup1, cleanup2, cleanup3 := otelTrace.InitTracer() defer func() { // 使用带超时的 context 来关闭导出器 ctx := context.Background() shutdownCtx, cancel := context.WithTimeout(ctx, 10*time.Second) defer cancel() if cleanup1 != nil { _ = cleanup1(shutdownCtx) } if cleanup2 != nil { _ = cleanup2(shutdownCtx) } if cleanup3 != nil { _ = cleanup3(shutdownCtx) } }() // 使用 context.Background() 作为基础 context ctx := context.Background() go notify.CreateOrderNotifyConsumer(ctx) go query.CreateSupplierOrderQueryCuConsumer(ctx) // go query.CreatePayForQueryConsumer(ctx) go service.OrderSettleInit(ctx) cache.Start() utils.StartProxyPool() //tasks.Start(ctx) // 初始化队列系统 queue.Init(ctx) third_party.StartOrderPool(ctx) web.Run() }