Nenhuma descrição
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

start_service.go 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package myservice
  2. import (
  3. "fmt"
  4. "log"
  5. "time"
  6. "git.x2erp.com/qdy/go-base/config"
  7. "github.com/go-micro/plugins/v4/registry/consul"
  8. "github.com/urfave/cli/v2"
  9. "go-micro.dev/v4/registry"
  10. "go-micro.dev/v4/web"
  11. )
  12. // StartWithRegistry starts microservice with registry (e.g., Consul)
  13. func StartWithRegistry(cfg config.IConfig) web.Service {
  14. // Get service information from config
  15. serviceConfig := cfg.GetService()
  16. microConfig := cfg.GetMicro()
  17. // 1. Create Consul registry
  18. consulRegistry := consul.NewRegistry(
  19. registry.Addrs(microConfig.RegistryAddress),
  20. )
  21. // 2. Create HTTP web service (for external HTTP access)
  22. service := web.NewService(
  23. web.Name(serviceConfig.ServiceName),
  24. web.Version(serviceConfig.ServiceVersion),
  25. web.Address(fmt.Sprintf(":%d", serviceConfig.Port)),
  26. web.Registry(consulRegistry),
  27. web.RegisterTTL(30*time.Second), // Health check interval
  28. web.RegisterInterval(20*time.Second), // Registration interval
  29. web.Flags(&cli.StringFlag{
  30. Name: "env",
  31. Value: "dev",
  32. Usage: "环境参数"}),
  33. web.Action(func(c *cli.Context) {
  34. cfg.SetEnv(c.String("env"))
  35. log.Printf("环境参数: %s\n", serviceConfig.Env)
  36. }),
  37. )
  38. // 3. Initialize service
  39. service.Init()
  40. log.Printf("Microservice started (with registry)")
  41. log.Printf(" • Service name: %s", serviceConfig.ServiceName)
  42. log.Printf(" • Version: %s", serviceConfig.ServiceVersion)
  43. log.Printf(" • Port: %d", serviceConfig.Port)
  44. log.Printf(" • Registry: %s", microConfig.RegistryAddress)
  45. log.Printf(" • IdleTimeout: %d秒", serviceConfig.IdleTimeout)
  46. log.Printf(" • ReadTimeout: %d秒", serviceConfig.ReadTimeout)
  47. log.Printf(" • WriteTimeout: %d秒", serviceConfig.WriteTimeout)
  48. // // Run in background
  49. // go func() {
  50. // if err := service.Run(); err != nil {
  51. // log.Printf("Microservice stopped: %v", err)
  52. // }
  53. // }()
  54. return service
  55. }
  56. // StartStandalone starts standalone microservice (not registered to registry)
  57. func StartStandalone(cfg config.IConfig) web.Service {
  58. // Get service information from config
  59. serviceConfig := cfg.GetService()
  60. // Create HTTP web service (standalone operation)
  61. service := web.NewService(
  62. web.Name(serviceConfig.ServiceName),
  63. web.Version(serviceConfig.ServiceVersion),
  64. web.Address(fmt.Sprintf(":%d", serviceConfig.Port)),
  65. // No Registry specified = standalone service
  66. )
  67. // Initialize service
  68. if err := service.Init(); err != nil {
  69. log.Fatalf("Service init failed: %v", err)
  70. }
  71. log.Printf("Standalone microservice started")
  72. log.Printf(" • Service name: %s", serviceConfig.ServiceName)
  73. log.Printf(" • Version: %s", serviceConfig.ServiceVersion)
  74. log.Printf(" • Port: %d", serviceConfig.Port)
  75. log.Printf(" • Mode: Standalone (no service discovery)")
  76. // // Run in background
  77. // go func() {
  78. // if err := service.Run(); err != nil {
  79. // log.Printf("Microservice stopped: %v", err)
  80. // }
  81. // }()
  82. return service
  83. }
  84. // Start maintains compatibility with original interface, uses registry version by default
  85. func Start(cfg config.IConfig) web.Service {
  86. return StartWithRegistry(cfg)
  87. }