栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Nacos注册功能入门

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Nacos注册功能入门

Nacos参考文档:https://nacos.io/zh-cn/docs/quick-start.htmlNacos是SpringCloudAlibaba推出的一个注册中心,个人认为其功能十分强大。与Eureka不同的是,Nacos并不需要独立的创建一个服务,其本身就是一个Springboot服务,直接下载安装解压就可以了

 1.依赖引入

    com.alibaba.cloud
    spring-cloud-alibaba-dependencies
    2.2.6.RELEASE
    pom
    import

    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery
 2. 配置编写
spring:
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 //Nacos默认端口为8848,此处为Nacos的服务地址

完成上面两步,启动项目,打开nacos的可视化页面(ip+端口/nacos;例如localhost:8848/nacos;账号密码默认为nacos)就可以发现相关服务已经注册到Nacos中了 


分级存储模型

一个服务可以有多个实例,例如我们的用户功能,有三个实例,且分布在不同的机房:

127.0.0.1:8081,在上海机房127.0.0.1:8082,在上海机房127.0.0.1:8083,在杭州机房

Nacos就将同一机房内的实例,划分为一个集群。

微服务互相访问时,应该尽可能访问同集群实例(需要配置负载均衡规则NacosRule),因为本地访问速度更快。当本集群内不可用时,才访问其它集群。例如:杭州机房内的 order-service 应该优先访问同机房的 user-service。

配置集群
spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ # 集群名称 HZ杭州

假设配置了两个HZ集群,一个SH集群,查看 nacos 控制台:

 NacosRule负载设置

Ribbon的默认实现 ZoneAvoidanceRule 并不能实现根据同集群优先来实现负载均衡,我们把规则改成 NacosRule 即可。例如:我们是用订单服务 调用 用户服务,那我们只需在订单服务中配置规则。配置成功后,订单服务会优先调用同集群的服务,当同集群中没有该服务时,会在控制台弹出相关警告,并访问其他集群的服务

第一种方式:

@Bean
public IRule iRule(){
    //默认为轮询规则,这里自定义为随机规则
    return new NacosRule();
}

第二种方式:

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则 

权重配置

实际部署中会出现这样的场景:

服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。但默认情况下 NacosRule 是同集群内随机挑选,不会考虑机器的性能问题。

因此,Nacos 提供了权重配置来控制访问频率,0~1 之间,权重越大则访问频率越高,权重修改为 0,则该实例永远不会被访问。

在 Nacos 控制台,找到 相关的实例列表,点击编辑,即可修改权重。

在弹出的编辑窗口,修改权重

另外,在服务升级的时候,有一种较好的方案:我们也可以通过调整权重来进行平滑升级

例如:userservice服务有三个实例分别为userservice1、userservice2、userservice3。当服务需要升级时,可以先将uservice1的权重调节为 0,让用户先流向 userservice2、userservice3,成功升级 userservice1后,再把权重从 0 调到 0.1,让一部分用户先体验,当用户体验稳定后,就可以往上调权重了。

环境隔离(为了做数据和服务的管理提出的概念)

Nacos 提供了 namespace 来实现环境隔离功能。

Nacos 中可以有多个 namespacenamespace 下可以有 group、service 等不同 namespace 之间相互隔离,例如不同 namespace 的服务互相不可见

创建namespace 

默认情况下,所有 service、data、group 都在同一个 namespace,名为 public(保留空间):

我们可以点击页面新增按钮,添加一个 namespace:

然后,填写表单:

就能在页面看到一个新的 namespace:

配置namespace
spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ
        namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间ID

重启 order-service 后,访问控制台。

public

dev

 此时访问 order-service,因为 namespace 不同,会导致找不到 userservice,控制台会报错:

临时实例与非临时实例

Nacos 的服务实例分为两种类型:

临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。

配置一个服务实例为永久实例:

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 设置为非临时实例

Nacos于Eureka对比

共同点:

    都支持服务注册和服务拉取都支持服务提供者心跳方式做健康检测

不同点:

    Nacos支持服务端主动检测提供者状态,临时实例采用心跳模式,非临时实例采用主动检测模式临时实例心跳不正常会被Nacos从服务列表中剔除,非临时实例则不会被剔除Nacos支持服务列表变更的消息推送模式,服务列表更新更及时;Eureka只支持定时拉取Nacos集群默认采用AP方式,当集群中存在非临时实例时采用CP模式;Eureka采用AP模式 

 注:本文参考于微服务技术栈 - 乐心湖's Blog | 技术小白的技术博客

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/715997.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号