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


相关文章
|
2月前
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
134 0
|
2月前
|
缓存 弹性计算 API
用 Go 快速开发一个 RESTful API 服务
用 Go 快速开发一个 RESTful API 服务
|
10天前
|
Kubernetes Nacos 容器
nacos注册不上
我正在使用开源的Nacos,并已在Kubernetes中部署了Nacos服务,通过端口映射可在集群外访问Nacos控制台。Kubernetes使用NodePort类型暴露了8848、9848、9849、7848和9555端口,但在尝试注册时遇到问题,出现“Client not connected, current status: STARTING”的错误,导致启动失败。
|
23天前
|
Go API 开发者
深入探讨:使用Go语言构建高性能RESTful API服务
在本文中,我们将探索Go语言在构建高效、可靠的RESTful API服务中的独特优势。通过实际案例分析,我们将展示Go如何通过其并发模型、简洁的语法和内置的http包,成为现代后端服务开发的有力工具。
|
2月前
|
安全 Go Docker
Go服务Docker Pod不断重启排查和解决
该文章分享了Go服务在Docker Pod中不断重启的问题排查过程和解决方案,识别出并发写map导致fatal error的问题,并提供了使用sync.Map或concurrent-map库作为并发安全的替代方案。
22 4
|
2月前
|
存储 JSON 监控
viper - go 配置管理
viper - go 配置管理
34 3
|
2月前
|
XML JSON Go
微服务架构下的配置管理:Go 语言与 yaml 的完美结合
微服务架构下的配置管理:Go 语言与 yaml 的完美结合
|
2月前
|
运维 监控 程序员
Go 服务自动收集线上问题现场
Go 服务自动收集线上问题现场
|
2月前
|
SQL JavaScript Go
Go Web 服务框架实现详解
Go Web 服务框架实现详解
|
2月前
|
前端开发 Go 开发者
用 Go + WebSocket 快速实现一个 chat 服务
用 Go + WebSocket 快速实现一个 chat 服务
下一篇
无影云桌面