nacos上手相关配置总结,自备水杯,因为全是干货

1、BOM统一管理

  • 配置:
<properties>
<!--    声明 ${spring-cloud-alibaba.version}变量的地方,供后续依赖引用使用-->
 <spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
</properties>


<dependency>
 <groupId>com.alibaba.cloud</groupId>
 <artifactId>spring-cloud-alibaba-dependencies</artifactId>
 <version>${spring-cloud-alibaba.version}</version>
 <type>pom</type>
 <scope>import</scope>
</dependency>
  • 作用:
    这是Spring Cloud Alibaba 的 BOM(依赖管理)用于统一管理 Spring Cloud Alibaba 各个组件(如 Nacos、Sentinel、RocketMQ 等)的版本,防止版本冲突、版本不匹配问题

  • 导入位置
    需要放到父项目的pom.xml件中

    这个配置是声明spring cloud alibaba的管理配置用,并不是依赖,只能放到下面依赖管理中:
    <dependencyManagement> </dependencyManagement>

2、服务注册与服务发现

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

  • 作用
    用于服务注册和服务发现

  • 导入位置
    任何涉及到服务注册和服务发现的子项目,都要在其pom.xml中配置

3、负载均衡

配置

<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

作用

顾名思义,确保在远程调用服务时,合理的分摊给可用服务器

导入位置

远程调用服务的发起方的`pom.xml`文件

注意事项

想要远程调用,还需要给restTemplate加上@LoadBalanced注解:

@Configuration
public class BeanConfig {

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
            return new RestTemplate();
    }
}

与此同时,调用的url要使用被调用服务的名称:

 public OrderInfo selectOrderById(Integer id) {

        OrderInfo orderInfo = orderMapper.selectOrderById(id);
		
		//product-service是一个服务名称,根据实际服务名称填写
        String url="http://product-service/product/"+orderInfo.getProductId();
        
        ProductInfo forObject = restTemplate.getForObject(url, ProductInfo.class);//第二个参数是需要返回的参数类型
        orderInfo.setProductInfo(forObject);
        return orderInfo;
    }

4、权重配置

权重概述

在nacos平台我们可以直接对某一个服务的权重进行修改(0-1)数值越大,当前服务承担的任务量越大:
在这里插入图片描述
当weight为0时,发起的请求不会通过这个服务。

配置

# 告诉nacos启用自己的负载均衡策略
spring:
  cloud:
    loadbalancer:
      nacos:
        enabled: true

导入位置

子项目src/main/resources路径下的application.yml文件

作用

告诉nacos启用nacos的负载均衡策略

注意:如果不开启nacos的负载均衡策略,weight只会在被识别为0(停止服务),或者1(开启服务)

5、同集群优先访问

集群概述

这里说的集群指的是服务器集群,也就是提供同种类型服务的服务器集合。这些集合可能被放置在不同的地理位置。不同地理位置的集群之间进行通信会有一定延迟,因此可以设置同集群优先访问的方式优先向里用户最近的服务器发起请求,来提升响应速度。
在这里插入图片描述

配置

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 开启nacos的服务器的IP:端口号
          cluster-name: 自定义的集群名称

导入位置

子项目src/main/resources路径下的application.yml文件

注意: 同集群优先访问需要开启nacos的负载均衡策略才会生效,也就是第4点中的配置!!!

6、临时和非临时实例

概述

临时和非临时实例涉及nacos对客户端的健康检查机制,nacos健康检查机制有两种:
客户端主动上报机制:

  • 客⼾端通过⼼跳上报⽅式告知服务端(nacos注册中⼼)健康状态, 默认⼼跳间隔5秒;
  • nacos会在超过15秒未收到⼼跳后将实例设置为不健康状态, 超过30秒将实例删除
  • nacos中临时实例使用的就是主动上报机制;

服务器反向探测机制:

  • nacos主动探知客⼾端健康状态(发送信息,看客服端是否有反应), 默认间隔为20秒;
  • 健康检查失败后(客户端没有反应)实例会被标记为不健康, 不会被⽴即删除
  • nacos中非临时实例使用的时反向探测机制;

配置

spring:
 cloud:
   nacos:
     discovery:
       ephemeral: false # 设置为⾮临时实例 / ephemeral是短暂的意思

导入位置

子项目src/main/resources路径下的application.yml文件

常见问题

1、Nacos服务实例类型不允许改变

出现如下报错:

errMsg: Current service DEFAULT_GROUP@@product-service is
 ephemeral service, can't register persistent instance. ;

原因:
Nacos会记录每个服务实例的IP和端⼝号, 当发现IP和端⼝都没有发⽣变化时, Nacos不允许⼀个
服务实例类型发⽣变化, ⽐如从临时实例,变为⾮临时实例, 或者从⾮临时实例, 变成临时实例

解决办法:

  1. 停掉nacos
  2. 删除nacos ⽬录下 /data/protocol/raft 信息, ⾥⾯会保存应⽤实例的元数据信息

2、服务正常,但是健康状态显示为false

解决办法:
如何解决健康检查不通过的问题-阿里云帮助中心

7、环境隔离

概述

在程序开发过程中,服务器需要分为开发环境、测试环境、发布环境等。
nacos也提供了这样的支持。nacos使用namespace(命名空间)对不同服务器环境进行隔离,每个环境之间服务是不可见的。

配置

1、创建namespce

这一步相当于定义不同的服务器环境。首先打开nacos控制台点击命名空间,创建自定的环境,可以创建多个,pulic是默认的命名空间无法。
在这里插入图片描述
创建后会有一个命名空间的ID:在这里插入图片描述

2、添加配置

spring:
 cloud:
   nacos:
     discovery:
     #下面是刚才创建的自动生成的命名空间ID
       namespace: f7336070-5de6-451e-823a-9f78f42a398e

配置文件的地址是:子项目src/main/resources路径下的application.yml文件

作用

用于区分不同的开发环境

8、配置中心

概述

nacos提供了配置中心的服务,便于我们统一的管理修改naocs的相关配置信息

配置

nacos控制台

配置管理->配置列表->创建配置,定义DataID以及配置项:
在这里插入图片描述

DataID可以先填写项目名称,等一下会重点讲解这个字段。
加入测试的配置文件点击发布即可:
在这里插入图片描述

获取配置

  1. 引⼊Nacos Config依赖
<dependency>
 <groupId>com.alibaba.cloud</groupId>
 <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud 2020.*之后版本需要引⼊bootstrap-->
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
  1. 加入bootstrap配置文件
    yml和properties格式都可以,把这个配置文件放到application.yml相同路径中:
    在这里插入图片描述

bootstrap会比apllication配置文件更早进行加载

配置内容:

spring:
 application:
 # 这里的name要和nacos控制台中DataID匹配,才能准确读取对应配置信息
   name: product-service
     cloud:
       nacos:
         config:
           server-addr: nacos控制台IP地址:端口号
           #下面如果设置namespace会从指定的命名空间下去读取配置文件
           namespace: f7336070-5de6-451e-823a-9f78f42a398e
  1. 编写程序
package com.hyy.product.controller;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/config")
@RefreshScope//热更新,nacos配置中心配置文件更改后,会自动加载最新更新的配置文件
public class NacosController {

    //通过value关键字从nacos配置中心获取配置信息
    @Value("${nacos.test.num}")
    private Integer num;

    @RequestMapping("/get")
    public Integer get(){
        return num;
    }
}

  1. 访问接口
    在这里插入图片描述
    这样我们就从配置中心获取配置了。

DataID

完整格式:

${prefix}-${spring.profiles.active}.${file-extension}

  • prefix
    默认值为 spring.application.name。(这是我们刚才为什么设置成项目名称的原因) 也可以通过配置项
    spring.cloud.nacos.config.prefix 来自定义。

  • spring.profiles.active
    即当前环境对应的 profile。
    spring.profiles.active 为空时,对应的连接符 - 也将不存在,
    dataId 的拼接格式会变成:${prefix}.${file-extension}

  • file-extension
    为配置内容的数据格式,可以通过配置项
    spring.cloud.nacos.config.file-extension 来配置。
    目前仅支持 propertiesyaml 类型。如果没有这个配置默,文件类型默认是 properties

微服务启动时会读取多个配置文件,配置文件的读取优先级:
product-service-dev.properties > product-service.properties > product-service

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值