eureka用作注册中心,如果有多套环境的时候,通常须要部署多套eureka注册中心代码。nacos用作注册中心时,增加一个命名空间namespace的概念,可以用一套nacos注册中心去管理多套不同的环境服务器,此时的nacos显然一个平台的概念了。
nacos命名空间使用
1、创建命名空间
打开nacos控制台,点击左侧命名空间标题,可以看到命名空间名称列表中有一个默认的public,public命名空间是nacos的保留空间,默认namespace对应ID为空。即不设置命名空间时候,默认的注册都在public空间下。回过头再看 nacos服务注册与发现 这篇博文的工程测试部分,在nacos-provider和nacos-client工程都启动成功后,nacos管理台看到的注册情况如下
默认的服务列表都在public空间下面,分组名称为默认分组DEFAULT_GROUP。
那如何创建一个新的命名空间呢,在nacos控制台左侧的命名空间标题,点开后,点击新建命名空间,可以看到弹出的新建命名空间窗口。
一个nacos注册中心的命名空间名具有唯一性,即命名空间名不可以重复。新建命名空间时候,如果不填写命名空间id,则系统会自动生成命名空间id,生成规则为UUID方式。
这里,我们创建一个空间名为dev,空间id为3bab8e9d-972c-4b11-a44f-74714ac7f471的开发环境命名空间。
2、命名空间工程中使用
在有命名空间之前,nacos-client的工程注册中心配置为
server.port=8081
spring.application.name=nacos-client
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
增加命名空间后,代码中须要配置命名空间id,代码中不配置命名空间名称。故在之前的配置文件中,增加如下命名空间配置项
spring.cloud.nacos.discovery.namespace=3bab8e9d-972c-4b11-a44f-74714ac7f471
这里只修改nacos-client的配置修改,nacos-provider不做命名空间修改,即nacos-provider继续使用保留空间public。
启动nacos-client和nacos-provider工程
启动nacos-client工程的时候,启动日志里面有关nacos注册中心内容有如下日志信息
[REGISTER-SERVICE] 3bab8e9d-972c-4b11-a44f-74714ac7f471 registering service DEFAULT_GROUP@@nacos-client with instance: {"clusterName":"DEFAULT","enabled":true,"ephemeral":true,"healthy":true,"instanceHeartBeatInterval":5000,"instanceHeartBeatTimeOut":15000,"ip":"192.168.187.1","ipDeleteTimeout":30000,"metadata":{"preserved.register.source":"SPRING_CLOUD"},"port":8081,"weight":1.0}
可以清晰看到,注册信息中包含了命名空间id信息 3bab8e9d-972c-4b11-a44f-74714ac7f471。
两个工程都启动好之后,在nacos控制台可以看到,public命名空间下,有nacos-provider一台实例存在。
在dev空间下,有nacos-client一台实例存在
此时,我们尝试在nacos-client端调用一下服务试试 http://localhost:8081/hi?name=zhangqi
调用失败是预料之内的事情,返回的错误为500错误,有一行日志信息 No instances available for nacos-provider,找不到nacos-provider这台实例。
至此,可以看到,nacos通过命名空间,将不同命名空间下注册的实例信息做了空间上的隔离。