package myservce import ( "fmt" "log" "time" "git.x2erp.com/qdy/go-base/config" "github.com/go-micro/plugins/v4/registry/consul" "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 ) // 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) // 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 service.Init() 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) }