【SpringCloud】2、Nacos基础

什么是Nacos

nacos是阿里巴巴集团开发一个服务发现、配置和管理的组件,相较于eureka,其功能更加强大,有服务健康监测、动态配置服务、动态 DNS 服务等功能。

Nacos实现

1、下载nacos服务端
其实nacos服务端就是一个jar包,去github下载就行,下载完后去bin目录运行。nacos默认的服务端口是8848,可以自己去配置中修改。
在这里插入图片描述
本机运行命令

startup.cmd -m standalone (要在管理员权限下启动)

2、客户端连接Nacos
首先导入nacos依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

修改配置文件,配置服务名称和nacos服务器的地址。

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: flase # 非临时实例
        server-addr: localhost:8848
  application:
    name: userserver

Nacos根据集群负载均衡

在大型的公司中,一个userserver服务会对应多台服务器,这些服务器分配在全国各地,向华中地区,华北地区等等,华中地区的orderserver如果要访问userserver当然是访问本地的服务器这样延迟就会低好多。
1、划分集群

spring:
  cloud:
    nacos:
      discovery:
      	cluster-name: huabei

2、开启nacos负载均衡策略

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

3、实现
开启三个userserver服务器,两个是huabei集群,一个是华中集群。
在这里插入图片描述

开启一个orderserver服务器,为huabei集群。
在这里插入图片描述使用orderserver向userserver发起10次请求。结果是华huabei集群的两个userserver服务器都接受到了请求,但是huazhong集群的userserver没有接收到请求。

根据权重负载均衡

在nacos服务器端可以修改各个服务的权重,权重越高处理的请求也就越多。
由于服务器的性能不尽相同,可以给高性能的服务器分配较高的权重
在这里插入图片描述

Nacos服务健康监测

服务健康监测顾名思义就是监测这个服务器是否健康,能够正常工作。
Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。
在这里插入图片描述在nacos中的实例分为临时实例和持久实例,具体配置通过ephemeral参数实现。

  • ephemeral为false时为持久实例,其健康监测模式是server模式,即服务端自动化检测,默认监测时间间隔为20s,当监测到实例关闭时,会设置实例为不健康状态,但是不会删除实例。
  • ephemeral为true时是临时实例,对应client模式,客户端上传自己的健康状态给nacos,使用的是心跳的方式,每5s向nacos服务器发送一次健康次状态,当15s未发送将实例设置为不健康状态,超过30s删除实例。

环境隔离(namespace)

namespace用于环境隔离,不同namespace下的服务不能相互访问。
默认情况下具有一个public的命名空间,当然我们也可以自己创建命名空间。在这里插入图片描述字节创建命名空间时有两个必填的信息。

  • 命名空间名:和开发环境相关,如dev(开发)/test(测试)/prod(生产)
  • 描述:描述就行了
  • 命名空间ID:之后在application.yml中的spring.cloud.nacos.discovery.namespace中使用命名空间ID来指定命名空间,这个值要是唯一的。
    在这里插入图片描述在项目的配置文件中配置namespace。
    在这里插入图片描述

nacos配置管理

在集群环境下nacos一个userserve服务就会有多个不同的服务器,这些服务器的配置需要得到统一的管理,如果挨个去修改会十分麻烦,而且每次修改配置都要重新启动服务器,这样十分麻烦,那么nacos就提供了统一配置管理和热更新的方式来解决这个问题。
nacos服务器中配置界面
在这里插入图片描述

现在有这样一种情况,一个游戏有中国服和日服。中国服和日服的语言包不一样但是版本是一样的。
1、导入依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

2、在nacos中添加配置文件

  • 对所有userserver生效的配置文件:userserver.yaml($(spring.application.name).文件类型)
    在这里插入图片描述

  • 对特定环境生效的配置文件:userserver-chinese/japanese.yaml($(spring.application.name)-(profiles.active).文件类型)
    在这里插入图片描述
    3、在userserver服务中导入nacos配置
    在springboot服务启动时,最先加载bootstrap.yaml配置文件,然后加载nacos中的配置文件,再加载application.yaml文件,最后生成spring容器并且创建bean。
    所以对于服务的名称、环境、nacos服务的地址、nacos配置文件后缀名这些应该放在bootstrap.yaml配置文件中,这样注册的服务才能找到nacos服务器以及对应的配置文件。
    bootstrap.yaml

spring:
  application:
    name: userserver #服务的名称
  profiles:
    active: chinese #环境
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        file-extension: yaml #后缀名

4、调用nacos配置文件内容
推荐用法创建一个NacosPatternProperties类专门来读取配置文件。

  • NacosPatternProperties.class
@Component // 创建bean
@ConfigurationProperties(prefix = "pattern") //前缀名
@Data
public class NacosPatternProperties {
    private String version; // 参数名称
    private Boolean language_package; //参数名称
}

  • 使用
    @Resource
    NacosPatternProperties nacosPatternProperties;
    @GetMapping("/getProp")
    public HashMap<String,Object> getProp(){
        String language_package = nacosPatternProperties.getLanguage_package();
        String version = nacosPatternProperties.getVersion();
        HashMap<String,Object> map = new HashMap<>();
        map.put("language_package",language_package);
        map.put("version",version);
        return map;
    }

5、结果
profiles.active:chinese的服务
在这里插入图片描述
profiles.active:japanese的服务
在这里插入图片描述
7、热更新配置
nacos中的配置是热更新的,无需启动注册的服务就可以完成配置的更新。
在调用配置的类上面要加上@RefreshScope标签。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值