| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- package myservice
-
- 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)
- 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)
- }
|