config.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. package nacos
  2. import (
  3. "errors"
  4. "fmt"
  5. "strings"
  6. cons "git.shuncheng.lu/bigthing/gocommon/pkg/internal/constant"
  7. "git.shuncheng.lu/bigthing/gocommon/pkg/internal/util"
  8. "github.com/nacos-group/nacos-sdk-go/clients"
  9. "github.com/nacos-group/nacos-sdk-go/clients/config_client"
  10. "github.com/nacos-group/nacos-sdk-go/clients/naming_client"
  11. "github.com/nacos-group/nacos-sdk-go/common/constant"
  12. )
  13. // go get golang.org/x/tools/cmd/stringer
  14. //go:generate stringer -type=NamingType
  15. type NamingType uint8
  16. const (
  17. NacosDiscover NamingType = iota + 1
  18. NacosRegister
  19. )
  20. type NamingInfo struct {
  21. ProjectName string
  22. GroupName string
  23. ClusterName string
  24. ServerPort uint64
  25. ServerHost string
  26. naming_client.INamingClient
  27. }
  28. type ConfigInfo struct {
  29. DataId string
  30. Group string
  31. config_client.IConfigClient
  32. }
  33. func NewHost(str string) ([]constant.ServerConfig, error) {
  34. split := strings.Split(str, ",")
  35. result := make([]constant.ServerConfig, 0, len(split))
  36. for _, elem := range split {
  37. if strings.TrimSpace(elem) == "" {
  38. continue
  39. }
  40. ipAndPort := strings.Split(elem, ":")
  41. if len(ipAndPort) != 2 {
  42. return nil, errors.New("ip and port 解析失败")
  43. }
  44. result = append(result, constant.ServerConfig{
  45. IpAddr: ipAndPort[0],
  46. Port: util.String2Uint64(ipAndPort[1]),
  47. })
  48. }
  49. if len(result) == 0 {
  50. return nil, errors.New("nacos not set host")
  51. }
  52. return result, nil
  53. }
  54. func getNacosConfig(key string, setAndAssertNilFunc util.SetAndAssertNil) (map[string]string, error) {
  55. config := make(map[string]string, 0)
  56. if err := setAndAssertNilFunc(config, key, "host"); err != nil {
  57. return nil, err
  58. }
  59. if err := setAndAssertNilFunc(config, key, "log_path"); err != nil {
  60. return nil, err
  61. }
  62. if err := setAndAssertNilFunc(config, key, "log_level", "debug"); err != nil {
  63. return nil, err
  64. }
  65. if err := setAndAssertNilFunc(config, key, "namespace_id"); err != nil {
  66. util.Warnf("Nacos config find warn: %v", err)
  67. }
  68. if err := setAndAssertNilFunc(config, key, "user_name"); err != nil {
  69. //return nil, err
  70. util.Warnf("Nacos config find warn: %v", err)
  71. }
  72. if err := setAndAssertNilFunc(config, key, "password"); err != nil {
  73. //return nil, err
  74. util.Warnf("Nacos config find warn: %v", err)
  75. }
  76. if err := setAndAssertNilFunc(config, key, "timeout", "5000"); err != nil {
  77. return nil, err
  78. }
  79. //if err := setAndAssertNilFunc(config, key, "listen_interval", "10000"); err != nil {
  80. // return nil, err
  81. //}
  82. return config, nil
  83. }
  84. func NewNacosNameClient(_type NamingType, setAndAssertNilFunc util.SetAndAssertNil) (*NamingInfo, error) {
  85. config, err := getNacosConfig("nacos-server", setAndAssertNilFunc)
  86. if err != nil {
  87. return nil, err
  88. }
  89. hosts, err := NewHost(config["host"])
  90. if err != nil {
  91. return nil, err
  92. }
  93. switch _type {
  94. case NacosRegister:
  95. _ = setAndAssertNilFunc(config, "nacos-server", "server_port")
  96. if config["server_port"] == "" {
  97. configTmp := map[string]string{}
  98. if err := setAndAssertNilFunc(configTmp, cons.ApplicationName, cons.PortName); err != nil {
  99. return nil, errors.New(fmt.Sprintf("config nacos.server_port or %s.%s == nil", cons.ApplicationName, cons.PortName))
  100. }
  101. // 兼容历史逻辑
  102. config["server_port"] = configTmp[cons.PortName]
  103. }
  104. _ = setAndAssertNilFunc(config, "nacos-server", "server_name")
  105. if config["server_name"] == "" {
  106. configTmp := map[string]string{}
  107. if err := setAndAssertNilFunc(configTmp, cons.ApplicationName, cons.ProjectName); err != nil {
  108. return nil, errors.New(fmt.Sprintf("config nacos.project_name or %s.%s is null", cons.ApplicationName, cons.ProjectName))
  109. }
  110. // 兼容历史逻辑
  111. config["server_name"] = configTmp[cons.ProjectName]
  112. }
  113. // 这些默认值的不需要校验
  114. if err := setAndAssertNilFunc(config, "nacos-server", "server_host", ""); err != nil {
  115. util.Warnf("Nacos config find warn: %v", err)
  116. localIP, ipErr := util.GetLocalIP()
  117. if ipErr != nil {
  118. return nil, ipErr
  119. }
  120. config["server_host"] = localIP
  121. }
  122. if err := setAndAssertNilFunc(config, "nacos-server", "group_name", "DEFAULT_GROUP"); err != nil {
  123. return nil, err
  124. }
  125. if err := setAndAssertNilFunc(config, "nacos-server", "cluster_name", "DEFAULT"); err != nil {
  126. return nil, err
  127. }
  128. case NacosDiscover:
  129. }
  130. nacosClient, err := clients.CreateNamingClient(map[string]interface{}{
  131. "serverConfigs": hosts,
  132. "clientConfig": constant.ClientConfig{
  133. LogLevel: config["log_level"], // debug,info,warn,error
  134. TimeoutMs: util.String2Uint64(config["timeout"]),
  135. //ListenInterval: util.String2Uint64(config["listen_interval"]), // 无效字段
  136. NotLoadCacheAtStart: true,
  137. LogDir: config["log_path"],
  138. Username: config["user_name"],
  139. Password: config["password"],
  140. NamespaceId: config["namespace_id"],
  141. },
  142. })
  143. if err != nil {
  144. return nil, err
  145. }
  146. util.Debugf("%s load config success, config=%+v", _type, config)
  147. return &NamingInfo{
  148. ProjectName: config["server_name"],
  149. ServerPort: util.String2Uint64(config["server_port"]),
  150. ServerHost: config["server_host"],
  151. GroupName: config["group_name"],
  152. ClusterName: config["cluster_name"],
  153. INamingClient: nacosClient,
  154. }, nil
  155. }
  156. func NewNacosConfigClient(setAndAssertNilFunc util.SetAndAssertNil) (*ConfigInfo, error) {
  157. config, err := getNacosConfig("nacos-config", setAndAssertNilFunc)
  158. if err != nil {
  159. return nil, err
  160. }
  161. if err := setAndAssertNilFunc(config, "nacos-config", "data_id"); err != nil {
  162. return nil, err
  163. }
  164. if err := setAndAssertNilFunc(config, "nacos-config", "group", "DEFAULT_GROUP"); err != nil {
  165. return nil, err
  166. }
  167. hosts, err := NewHost(config["host"])
  168. if err != nil {
  169. return nil, err
  170. }
  171. client, err := clients.CreateConfigClient(map[string]interface{}{
  172. "serverConfigs": hosts,
  173. "clientConfig": constant.ClientConfig{
  174. LogLevel: config["log_level"], // debug,info,warn,error
  175. TimeoutMs: util.String2Uint64(config["timeout"]),
  176. //ListenInterval: util.String2Uint64(config["listen_interval"]), // 无效字段
  177. NotLoadCacheAtStart: true,
  178. LogDir: config["log_dir"],
  179. Username: config["user_name"],
  180. Password: config["password"],
  181. NamespaceId: config["namespace_id"],
  182. },
  183. })
  184. if err != nil {
  185. return nil, err
  186. }
  187. util.Debugf("NacosConfig load config success, config=%+v", config)
  188. return &ConfigInfo{
  189. DataId: config["data_id"],
  190. Group: config["group"],
  191. IConfigClient: client,
  192. }, nil
  193. }