| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- 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)
- }
|