Nacos服务注册和发现以及配置管理技术分享,Go中接入非常简单极易上手

简介: Nacos服务注册和发现以及配置管理技术分享,Go中接入非常简单极易上手

640.png

Nacos服务发现注册和配置管理分享




1. 为什么使用Nacos


因为现在主流公司已经开始推荐使用nacos了,nacos的两大主要作用:一个是服务注册发现,一个是配置管理。


2. Nacos是什么?


640.png


3. Nacos的结构和组件

640.jpg

640.png

640.png

4. 了解几个Nacos概念


640.png

5. Nacos角色

640.png


6. 安装部署


安装和部署特别简单,支持单机部署和集群部署,详情可参考nacos的官网。部署完成之后页面长这个样子:

640.png

640.png


对上面几个名词做下解释:


640.png640.png640.png640.png



7. 配置管理


640.png

可以从页面导入配置,如下图所示, 在dev环境下,新建两个配置文件:service1.yml, service2.yml

640.png


如果有多个配置文件,我们可以使用扩展配置的方式,添加多个配置文件:

640.png


我们简单看下在spring cloud中如何配置:


  • 第一个配置,只有一个data-id,没有group,采用默认的DEFAULT_GROUP。
  • 第二个扩展配置,定义了一个GLOBAL_GROUP,全局配置。
  • 第三个扩展配置: 定义为一个自动刷新的GROUP,并设置自动刷新属性为true。


640.png


8. 服务发现原理


A如何调用B呢?

640.png

有两个微服务A和B,A调用B,那么A是如何调用B的呢?我们可以通过http请求,进行调用,也可以使用rpc进行调用。


不管使用什么方式,A需要知道B的地址和端口号。那么A是如何知道B的地址和端口号的呢? 如上图:


  1. B服务启动的时候,会注册到服务发现中心,告诉他我的ip和端口号是什么?这里应该也是接口调用,通知服务发现中心的。
  2. A服务启动的时候,也会注册的服务发现中心,告诉他我的ip和端口号是什么? 同时服务发现中心会告诉我,当前已注册的服务的ip和端口号。这里通过一个接口请求和参数返回就可以实现。
  3. 拿到了B服务的ip和port,接下来就可以调用服务B了。


9. Go中实践


注册:


640.png

newNacos获取Nacos配置,然后通过client客户端将本项目所配置的自己的ip和port以及service name注册到nacos,这样nacos配置列表就会有一条记录:

640.png

点击查看详情:

640.png


gRPC发现:


type req struct {
 GrpcConn *grpc.ClientConn
}
var (
 once = sync.Once{}
 ins  *req
)
//创建一个gRPC 客户端 ,业务代码中直接调用它就行
func NewRequest() *req {
 once.Do(func() {
  confPath := "nacos.naming.test"
  ins = &req{GrpcConn: request.NewGrpcClient(confPath)}
 })
 return ins
}
//创建一个gRPC客户端
func NewGrpcClient(serviceConf string) *grpc.ClientConn {
  // 获取nacos集群配置
 nacosConf := newNacos()
  // 获取注册列表
 r, serviceName, err := naming(nacosConf, serviceConf)
 if err != nil {
  return nil
 }
  // 创建gRPC 客户端
 grpcC, err := newGrpcClient(r, serviceName)
 if err != nil {
  return nil
 }
  //返回
 grpcConn := grpcC.ClientConn
 return grpcConn
}
//获取nacos集群配置
func newNacos() *nacos.Option {
 nacosConf := nacos.NewOption()
 nacosConf.ClientConfig.NamespaceID = config.GetString("nacos.clientconfig.namespaceid")
 nacosConf.ServerConfig = append(nacosConf.ServerConfig, knacos.ServerConfig{
  IPAddr: config.GetString("nacos.serverconfig.paddr"),
  Port:   uint64(config.GetInt64("nacos.serverconfig.port")),
 })
 return nacosConf
}
//通过nacos进行服务发现
func naming(nacosConf *nacos.Option, serviceConf string) (GrpcSolverBuilder, string, error) {
 cli, err := nacos.NewNamingClient(nacosConf)
 if err != nil {
  log.Panic(err)
 }
 r := resolver.New(cli.Client, &resolver.Option{
  //Clusters: []string{
  // config.GetString(serviceConf + ".clustername"),
  //},
  //GroupName: config.GetString(serviceConf + ".groupname"),
 })
 return r, config.GetString(serviceConf + ".servicename"), nil
}


小结


Nacos的使用非常简单,部署也非常简单,极易上手,因此在这里推荐大家使用它,原理也比较简单,希望之后能出一篇更加可操作的实战篇分享给大家。如果你觉得这篇文章对你有帮助,欢迎关注点赞分享转发。


相关文章
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
284 2
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
156 61
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
PHP 日志系统的最佳搭档:一个 Go 写的远程日志收集服务
为了不再 SSH 上去翻日志,我写了个 Go 小脚本,用来接收远程日志。PHP 负责记录日志,Go 负责存储和展示,按天存储、支持 API 访问、可远程管理,终于能第一时间知道项目炸了。
77 10
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
1255 14
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
138 5
阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。
在云原生时代,微服务架构成为主流。阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。示例代码展示了如何在项目中实现两者的整合,通过 Nacos 动态调整服务状态和配置,适应多变的业务需求。
250 2
|
8月前
|
Go Web服务中如何优雅平滑重启?
在生产环境中,服务升级时如何确保不中断当前请求并应用新代码是一个挑战。本文介绍了如何使用 Go 语言的 `endless` 包实现服务的优雅重启,确保在不停止服务的情况下完成无缝升级。通过示例代码和测试步骤,详细展示了 `endless` 包的工作原理和实际应用。
150 3
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
160 4
|
8月前
|
Go Web服务中如何优雅关机?
在构建 Web 服务时,优雅关机是一个关键的技术点,它确保服务关闭时所有正在处理的请求都能顺利完成。本文通过一个简单的 Go 语言示例,展示了如何使用 Gin 框架实现优雅关机。通过捕获系统信号和使用 `http.Server` 的 `Shutdown` 方法,我们可以在服务关闭前等待所有请求处理完毕,从而提升用户体验,避免数据丢失或不一致。
113 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等