package myservice import ( "fmt" "log" "time" "git.x2erp.com/qdy/go-base/config" "github.com/go-micro/plugins/v4/registry/consul" "github.com/urfave/cli/v2" "go-micro.dev/v4/registry" "go-micro.dev/v4/web" ) // StartWithRegistry starts microservice with registry (e.g., Consul) func StartWithRegistry(cfg config.IConfig) web.Service { // Get service information from config serviceConfig := cfg.GetService() microConfig := cfg.GetMicro() // 1. Create Consul registry consulRegistry := consul.NewRegistry( registry.Addrs(microConfig.RegistryAddress), ) // 2. Create HTTP web service (for external HTTP access) service := web.NewService( web.Name(serviceConfig.ServiceName), web.Version(serviceConfig.ServiceVersion), web.Address(fmt.Sprintf(":%d", serviceConfig.Port)), web.Registry(consulRegistry), web.RegisterTTL(30*time.Second), // Health check interval web.RegisterInterval(20*time.Second), // Registration interval web.Flags(&cli.StringFlag{ Name: "env", Value: "dev", Usage: "环境参数"}), web.Action(func(c *cli.Context) { cfg.SetEnv(c.String("env")) log.Printf("环境参数: %s\n", serviceConfig.Env) }), ) // 3. Initialize service service.Init() log.Printf("Microservice started (with registry)") log.Printf(" • Service name: %s", serviceConfig.ServiceName) log.Printf(" • Version: %s", serviceConfig.ServiceVersion) log.Printf(" • Port: %d", serviceConfig.Port) log.Printf(" • Registry: %s", microConfig.RegistryAddress) log.Printf(" • IdleTimeout: %d秒", serviceConfig.IdleTimeout) log.Printf(" • ReadTimeout: %d秒", serviceConfig.ReadTimeout) log.Printf(" • WriteTimeout: %d秒", serviceConfig.WriteTimeout) // // Run in background // go func() { // if err := service.Run(); err != nil { // log.Printf("Microservice stopped: %v", err) // } // }() return service } // StartStandalone starts standalone microservice (not registered to registry) func StartStandalone(cfg config.IConfig) web.Service { // Get service information from config serviceConfig := cfg.GetService() // Create HTTP web service (standalone operation) service := web.NewService( web.Name(serviceConfig.ServiceName), web.Version(serviceConfig.ServiceVersion), web.Address(fmt.Sprintf(":%d", serviceConfig.Port)), // No Registry specified = standalone service ) // Initialize service if err := service.Init(); err != nil { log.Fatalf("Service init failed: %v", err) } log.Printf("Standalone microservice started") log.Printf(" • Service name: %s", serviceConfig.ServiceName) log.Printf(" • Version: %s", serviceConfig.ServiceVersion) log.Printf(" • Port: %d", serviceConfig.Port) log.Printf(" • Mode: Standalone (no service discovery)") // // Run in background // go func() { // if err := service.Run(); err != nil { // log.Printf("Microservice stopped: %v", err) // } // }() return service } // Start maintains compatibility with original interface, uses registry version by default func Start(cfg config.IConfig) web.Service { return StartWithRegistry(cfg) }