servers.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package servers
  2. import (
  3. "gogs.tyduyong.com/duyong/dy-admin/internal/iam/config"
  4. "gogs.tyduyong.com/duyong/dy-admin/internal/iam/gs"
  5. "os"
  6. "os/signal"
  7. "syscall"
  8. )
  9. // APIServer 管理本服务开放的所有端口
  10. type APIServer struct {
  11. gRPCAPIServer *grpcAPIServer
  12. httpAPIServer *httpAPIServer
  13. }
  14. // PreparedAPIServer 必须得到此实例,才能run
  15. type PreparedAPIServer struct {
  16. *APIServer
  17. }
  18. func CreateAPIServer(cfg *config.Config) (*APIServer, error) {
  19. // 初始化外部依赖通用资源
  20. gs.InitGS(cfg)
  21. return &APIServer{
  22. gRPCAPIServer: newRpcServer(cfg),
  23. httpAPIServer: newHttpServer(cfg),
  24. }, nil
  25. }
  26. func (s *APIServer) PrepareRun() *PreparedAPIServer {
  27. // 服务运行前初始化和服务业务相关的操作
  28. return &PreparedAPIServer{s}
  29. }
  30. func (ps *PreparedAPIServer) Run() error {
  31. // 启动服务
  32. ps.gRPCAPIServer.Run()
  33. ps.httpAPIServer.Run()
  34. // 监听信号 2和9
  35. sigCh := make(chan os.Signal, 1)
  36. signal.Notify(sigCh, syscall.SIGINT, syscall.SIGKILL)
  37. <-sigCh
  38. // 停止服务
  39. ps.gRPCAPIServer.Close()
  40. ps.httpAPIServer.Close()
  41. return nil
  42. }