Nacos服务注册和发现以及配置管理技术分享,Go中接入非常简单极易上手
Nacos服务发现注册和配置管理分享-[公粽号:堆栈future]
原文
1. 为什么使用Nacos
“
因为现在主流公司已经开始推荐使用nacos了,nacos的两大主要作用:一个是服务注册发现,一个是配置管理。
”
2. Nacos是什么?
3. Nacos的结构和组件
4. 了解几个Nacos概念
5. Nacos角色
6. 安装部署
安装和部署特别简单,支持单机部署和集群部署,详情可参考nacos的官网。部署完成之后页面长这个样子:
对上面几个名词做下解释:
7. 配置管理
可以从页面导入配置,如下图所示, 在dev环境下,新建两个配置文件:service1.yml, service2.yml
如果有多个配置文件,我们可以使用扩展配置的方式,添加多个配置文件:
我们简单看下在spring cloud中如何配置:
-
第一个配置,只有一个data-id,没有group,采用默认的DEFAULT_GROUP。
-
第二个扩展配置,定义了一个GLOBAL_GROUP,全局配置。
-
第三个扩展配置: 定义为一个自动刷新的GROUP,并设置自动刷新属性为true。
8. 服务发现原理
A如何调用B呢?有两个微服务A和B,A调用B,那么A是如何调用B的呢?我们可以通过http请求,进行调用,也可以使用rpc进行调用。
不管使用什么方式,A需要知道B的地址和端口号。那么A是如何知道B的地址和端口号的呢? 如上图:
-
B服务启动的时候,会注册到服务发现中心,告诉他我的ip和端口号是什么?这里应该也是接口调用,通知服务发现中心的。
-
A服务启动的时候,也会注册的服务发现中心,告诉他我的ip和端口号是什么? 同时服务发现中心会告诉我,当前已注册的服务的ip和端口号。这里通过一个接口请求和参数返回就可以实现。
-
拿到了B服务的ip和port,接下来就可以调用服务B了。
9. Go中实践
注册:
newNacos
获取Nacos配置,然后通过client客户端将本项目所配置的自己的ip和port以及service name注册到nacos,这样nacos配置列表就会有一条记录:点击查看详情:
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的使用非常简单,部署也非常简单,极易上手,因此在这里推荐大家使用它,原理也比较简单,希望之后能出一篇更加可操作的实战篇分享给大家。如果你觉得这篇文章对你有帮助,欢迎关注点赞分享转发。
堆栈future
使很多处于迷茫阶段的coder能从这里找到光明,堆栈创世,功在当代,利在千秋
134篇原创内容
公众号
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用