环境win11,jdk11,Nacos1.4.1,SpringBoot项目。
除了配置和Eureka不一样,其它都一样。
Nacos安装
GitHub的Release下载页:https://github.com/alibaba/nacos/releases
在bin目录:startup.cmd -m standalone,单机模式启动。
管理地址为:http://192.168.56.1:8848/nacos/index.html
账号和密码都是Nacos。
添加Maven依赖
在父工程的pom.xml中添加依赖:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.5.RELEASE</version><type>pom</type><scope>import</scope>
</dependency>
在子工程的pom.xml中添加依赖:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
项目中配置Nacos
配置nacos注册中心的地址:
spring:cloud:nacos:server-addr: localhost:8848 # nocos服务器地址
Nacos服务分级存储模型与调度问题
一个服务中可能有多个示例,Nacos根据地域来划分集群,相同地域的实例成为一个集群。
Nacos引入地域就是为了防止跨集群访问。
配置所在集群的名称:
spring:cloud:nacos:server-addr: localhost:8848 # nocos服务器地址discovery:cluster-name: SH # 所在的集群名字
在所有微服务的权重都为1的情况下:
配置指定服务名称所执行的方法,这里配置优先选择与自己在同一集群的微服务,在与自己同一集群的微服务中随机访问。
userservice: # 要做配置微服务的名称ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
Nacos跨集群访问时会有一个警告。
根据权重负载均衡
权重在0-1之间,数字越大权限越高,在Nacos的控制台中控制,权重为0时,不会被访问。
权重为0时,服务器需要更新重启时使用,重启后权重小一些先放小部分用户进来,没问题再加大权重。
在控制台更改权重后不需要重启微服务。
环境隔离-namespace
结构:Namescpae包含Group,Group包含Service/Data。
一般是根据业务和地域划分,但是有时候会有开发环境、测试环境、生产环境的变化,要想做环境变化做隔离,就要用到namespace了。
同一命名空间的微服务只能与同一空间的微服务通信。
命名空间在Nacos控制台中创建,如果不填写id,会自动生成uuid。
下面是配置命名空间的代码,namespace后面跟的是命名空间的id。
spring:cloud:nacos:server-addr: localhost:8848 # nocos服务器地址discovery:cluster-name: HZnamespace: 4d92420c-52d9-43e9-8b51-e27dd44dad86 #命名空间的uid
健康监测
Nacos默认会把微服务设置为临时示例。
临时实例:微服务向Nacos发送心跳信息,临时实例挂了时会被从列表中踢除。
非临时实例:Nacos向微服务发送信息询问还活着吗,非临时实例挂了时不会被从列表中踢除,只会标记为不健康了,会等着这个服务恢复。
Eureka客户端每隔30s向服务器拉取服务信息。
Nacos客户端每隔30s向服务器拉取服务信息,有服务挂了的时候会主动向客户推送变更消息。