SpringCloudAlibaba:服务注册与发现之Nacos学习

news2024/11/16 15:33:57

目录

一、服务注册与发现介绍

1、常见注册中心

2、服务注册与发现的基本流程是:

3、服务注册与发现的主要好处是:

二、Alibaba Nacos 介绍

三、Nacos基本使用

1.linux安装包方式单节点安装部署

1. jdk安装配置

2. nacos安装

2.Nacos集成SpringBoot实现服务注册与发现

1、创建父工程

2、创建基础公共模块(common)

3、创建用户模块(user-module)

4、将用户模块作为微服务注册到nacos

四、基于Feign实现服务调用

1) 什么是Feign

2) 负载均衡是啥意思

3) Feign的使用(创建订单模块 order)

1.创建订单模块,引入依赖

2.启动类加注解

3.yml文件配置

4.写个OrderController

5.给user模块的pom文件加入Fegin的依赖

6.给user模块在启动类上添加Fegin的注解

7.给user模块创建一个feign接口, 并使用Fegin实现微服务调用

8.controller调用并启动验证(user服务调用order服务)

五、Nacos 领域模型划分

1、命名空间划分

(1)创建命名空间

(2)配置微服务命名空间

2、group划分

六、日志配置

1、局部日志配置

方式一:

方式二

2、全局日志配置

(1)添加配置文件

(2)将springboot的日志级别调低

七、Nacos统一配置管理

一、为什么需要配置中心

二、常用的配置中心

Nacos 的几个概念

三、Nacos配置中心的使用

(一)properties格式

(二)yaml格式

(三)profiles.active—粒度配置

(四)自定义扩展的 Data Id 配置(共享配置)

(五)优先级

(六)动态配置刷新


一、服务注册与发现介绍

服务注册与发现是微服务架构中最核心的组件之一。它的主要作用是管理服务与服务实例的信息,使服务消费者能够动态地找到提供所需服务的服务实例。

在微服务架构下,一个业务服务会被拆分成多个微服务,各个服务之间相互通信完成整体的功能。另外,为了避免单点故障,微服务都会采取集群方式的高可用部署,集群规模越大,性能也会越高,服务消费者要去调用多个服务提供者组成的集群。

首先,服务消费者需要在本地配置文件中维护服务提供者集群的每个节点的请求地址。其次,服务提供者集群中如果某个节点下线或者宕机,服务消费者的本地配置中需要同步删除这个节点的请求地址,防止请求发送到已宕机的节点上造成请求失败。

为了解决这类的问题,就需要引入服务注册中心,它主要有以下功能:

  • 服务地址的管理。

  • 服务注册。

  • 服务动态感知。

1、常见注册中心

能够实现这类功能的组件很多,比如ZooKeeper、Eureka Consul、Etcd、Nacos等。在这一章中主要介绍Alibaba的Nacos。

  1. Eureka:Netflix 开源的服务注册与发现组件,Spring Cloud 将其集成,提供开箱即用的服务注册与发现功能。

  2. Consul:HashiCorp 出品的服务网格方案 Consul 的一部分,提供服务注册与发现、配置管理、服务监控等功能。

  3. Zookeeper:Apache 顶级项目,是一个树型的目录服务,支持变更推送,适合作为服务注册与发现组件。

  4. Etcd:CoreOS 开发的一个分布式可靠键值存储,也常用作服务注册与发现存储介质。

  5. Nacos:Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它是 Spring Cloud Alibaba 组件之一,负责服务注册发现和服务配置,可以这样认为nacos=eureka+config。

2、服务注册与发现的基本流程是:

  1. 服务启动时,向指定注册中心注册自己信息。信息包括服务名称、网络地址、端口号等。

  2. 服务消费者从注册中心获取所需服务信息,得到提供该服务的所有服务实例列表。

  3. 服务消费者基于某种负载均衡策略选择一个服务实例,发起调用。

  4. 服务实例停止时,向注册中心注销自己信息。

  5. 注册中心推送实例变更信息给消费者。

3、服务注册与发现的主要好处是:

  1. 服务消费者无需硬编码服务实例地址,注册中心充当服务代理,实现松耦合。

  2. 服务提供者可以弹性扩展,而不会影响消费者。注册中心会推送变更信息给消费者。

  3. 易于监控和管理服务,通过注册中心可以看到系统中有哪些服务及其实例。

  4. 有助于实现灰度发布,可以在注册中心控制实例流量,进行平滑升级。

二、Alibaba Nacos 介绍

Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它作为Spring Cloud Alibaba 微服务生态中的一个重要组件,主要提供以下功能:

  1. 服务发现和服务健康监测:支持基于 DNS 和基于 RPC 的服务发现,并提供实时的服务健康监测。

  2. 动态配置服务:支持 centralized configuration 和 Distributed configuration 两种模式,能够实时推送配置变更。

  3. 服务管理:提供服务编排管理、服务隔离、权重管理等服务管理功能。

三、Nacos基本使用

1.linux安装包方式单节点安装部署

Nacos 可以有三种部署模式:

  1. 单机模式:用于测试和开发环境,不支持集群。

  2. 集群模式:用于生产环境,支持集群部署,确保高可用。

  3. Multi-DataCenter 模式:用于多数据中心场景,支持跨数据中心部署,确保最大程度容灾。

    注:Nacos依赖Java环境,并且要求使用JDK1.8以上版本。

Nacos的安装方式有两种,一种是源码安装,另一种直接是使用已经编译好的安装包。这里选择使用安装包方式安装。

1. jdk安装配置

1)在 Linux 中安装和配置 JDK 需要以下步骤: 检查系统中是否已经安装过 JDK 和 JRE。可以使用以下命令来检查:

[root@localhost /]# java -version

2)如果系统中没有安装 JDK 和 JRE,则需要下载并安装 JDK。 参考 Oracle 官方网站,下载适合系统的 JDK 安装包。下载链接: Java Downloads | Oracle。 假设安装包为 /opt/jdk-11.0.11_linux-x64_bin.tar.gz。 解压安装包。可以使用以下命令:

tar -zxvf /opt/jdk-11.0.11_linux-x64_bin.tar.gz -C /opt/

3)配置环境变量。打开 /etc/profile 文件:

sudo vi /etc/profile

4)在文件末尾添加以下内容:

export JAVA_HOME=/opt/jdk-11.0.9 
export PATH=$JAVA_HOME/bin:$PATH

5)然后保存并退出文件。执行以下命令使配置文件立即生效:

source /etc/profile

6)验证 JDK 是否安装配置成功。可以使用以下命令:

java -version

执行该命令后,应该能看到已经安装的 JDK 版本信息。

 

2. nacos安装

 1)下载nacos的GitHub地址

 2)解压Nacos安装包

tar -zxvf nacos-server-2.2.2.tar.gz

解压完成后,会在解压的目录中看到一个nacos的文件夹。

3)配置Nacos

进入解压后的nacos目录,修改conf/application.properties文件:

# 启用standalone模式(这个没有请自己添加)
nacos.standalone=true
# 修改端口号
server.port=8848
# 修改数据存储位置(XXX.XXX.XXX.XXX是网络中属性的IPv4地址,设置正确的数据库及用户名和密码)
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://XXX.XXX.XXX.XXX:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=your-db-username
db.password=your-db-password

4)启动Nacos服务 进入nacos跟目录,执行以下命令:

[root@bogon nacos]# sh bin/startup.sh -m standalone

 

这样,就会启动Nacos服务。在启动过程中,如果出现错误,可以查看logs目录下的startup.log文件来查看具体错误信息。

Error creating bean with name 'grpcSdkServer': Invocation of init method failed; nested exception is java.io.IOException: Failed to bind to address 0.0.0.0/0.0.0.0:9848

我当时就报这个错,总是关于9848端口的问题

我试了两种方法:

1.关掉服务:[root@localhost bin]# sh shutdown.sh 再重启服务试试。

2.还有的话就是:/nacos/conf/application.properties这个配置文件的问题

 

5)访问Nacos服务(xxx.xxx.xxx.xxx 使用 ip a 命令来查看IP地址) Nacos默认的访问地址为http://xxx.xxx.xxx.xxx:8848/nacos,可以在浏览器中输入该地址来访问Nacos服务。如果一切正常,将会看到Nacos的登录界面,输入默认账号(nacos)密码(nacos)即可登录。

至此,Nacos就成功安装完成了。

 

此时会发现一个问题:

跳过权限认证,不需要登录就进去了,可以看我之前写的一篇博客:开启鉴权

 

2.Nacos集成SpringBoot实现服务注册与发现

 

1、创建父工程

创建一个maven工程,然后在pom.xml文件中添加下面内容 各个版本的对应关系参考官网:官网版本对应关系描述地址

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>BK-SpringCloud</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.6.11</version>
    </parent>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2021.0.4</version>
                <type>pom</type>
				<scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2021.0.4.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

 

2、创建基础公共模块(common)

在pom.xml中添加依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>BK-SpringCloud</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>alibaba-common</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.15</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>

 

3、创建用户模块(user-module)

步骤:

1 创建模块 导入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>BK-SpringCloud</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>alibaba-user</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>alibaba-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

2 创建SpringBoot主类

@SpringBootApplication
public class UserApplication {
  public static void main(String[] args) {
      SpringApplication.run(UserApplication.class,args);
  }
}

3 加入yml配置文件

spring:
  application:
    name: user-server
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/nacos?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456

4、将用户模块作为微服务注册到nacos

接下来开始修改alibaba-user模块的代码, 将其注册到nacos服务上

1)在pom.xml中添加nacos的依赖

<!--nacos客户端-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2)在主类上添加@EnableDiscoveryClient注解

@SpringBootApplication
@EnableDiscoveryClient
public class UserApplication {
  public static void main(String[] args) {
      SpringApplication.run(UserApplication.class,args);
  }
}

3)在application.yml中添加nacos服务的地址

spring:
  application:
    name: user-server
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/user?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456
  cloud:
    nacos:
      discovery:
        username: nacos
        password: nacos
        server-addr: 192.168.177.129:8848

4)启动服务, 观察nacos的控制面板中是否有注册上来的用户微服务

 

四、基于Feign实现服务调用

1) 什么是Feign

Feign是声明式Web服务客户端,让微服务之间的调用变得更加简单。Feign内部封装了Ribbon和Hystrix,具有负载均衡和服务容错能力。

Feign的主要作用是通过创建接口并添加注解的方式来调用其他微服务。它采用接口的形式来调用其他微服务,结合Ribbon和Hystrix,实现了负载均衡和服务容错,大大简化了远程调用的复杂度。

使用Feign主要有以下好处:

  1. 隐藏服务调用的复杂性:Feign以声明式的方式通过定义接口的方式来调用服务,简化了开发人员直接调用服务的过程。

  2. 具有负载均衡能力:Feign内置了Ribbon负载均衡客户端,可以实现服务调用的负载均衡。

  3. 具有服务容错能力:Feign内置了Hystrix服务容错组件,在服务调用过程中,可以实现服务降级、服务熔断等服务容错功能。

  4. 支持多种服务调用方式:Feign内置了HTTP、TCP等多种服务调用方式,扩展性强。

  5. 具有请求重试机制:在指定的重试时间内,对服务进行重试调用,提高服务调用的稳定性。

  6. 支持GZIP压缩:发送GET请求时,支持对请求和响应进行GZIP压缩,提高网络传输效率。

  7. 支持记录日志:Feign支持使用SLF4J记录日志,便于服务调用的调试和跟踪。

主要使用步骤:

  1. 添加Feign依赖

  2. 创建服务接口并添加@FeignClient注解

  3. 使用接口直接调用服务

  4. 针对服务调用配置超时时间、重试次数等

  5. 定义服务降级Fallback类,在服务不可用时返回默认降级值

2) 负载均衡是啥意思

负载均衡(Load Balancing)是一种计算机技术,它通过将工作量分配到多个计算资源上实现最大化计算资源的利用效率。

在分布式系统中,多个服务实例的部署可以实现服务的高可用和可扩展性。通过负载均衡器,客户端的请求可以在服务实例之间进行分发,实现负载的均衡分配与管理。

测试: 启动两个User,(改端口,改控制器方法中的内容),通过调接口访问不容的内容。

3) Feign的使用(创建订单模块 order)

1.创建订单模块,引入依赖

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>SpringCloudAlibaba</artifactId>
        <groupId>com.buba</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>order</artifactId>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.buba</groupId>
            <artifactId>common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--nacos客户端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
</project>

2.启动类加注解

@SpringBootApplication
@EnableDiscoveryClient
public class OrderApp {
    public static void main( String[] args ) {
        SpringApplication.run(OrderApp.class, args);
    }
}

3.yml文件配置

spring:
  application:
    name: order-server
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/nacos?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
      driver-class-name: com.mysql.cj.jdbc.Driver
      username: root
      password: 123456
  cloud:
    nacos:
      discovery:
        username: nacos
        password: nacos
        server-addr: 192.168.177.129:8848
server:
  port: ${random.int[0000,9999]}

4.写个OrderController

@RestController
@RequestMapping("order")
public class OrderController {
    @RequestMapping("/get1")
    public Integer get1(){
        return 111;
    }
}

5.给user模块的pom文件加入Fegin的依赖

<dependencies>
    <dependency>
        <groupId>com.buba</groupId>
        <artifactId>common</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <!--nacos客户端-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

6.给user模块在启动类上添加Fegin的注解

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients//开启Fegin
public class UserApp {
    public static void main( String[] args ) {
        SpringApplication.run(UserApp.class, args);
    }
}

7.给user模块创建一个feign接口, 并使用Fegin实现微服务调用

@FeignClient(value = "order-server",path = "/order")//声明调用的提供者的name
public interface OrderFeign {
    // 指定调用提供者的哪个方法
    // @FeignClient+@GetMapping 就是一个完整的请求路径 http://serviceproduct/product/{pid}
    @GetMapping("/get1")
    Integer get1();
}

8.controller调用并启动验证(user服务调用order服务)

@RestController
@RequestMapping("user")
public class UserController {
    @Resource
    private OrderFeign orderFeign;
    @RequestMapping("/get1")
    public Integer get1(){
        return orderFeign.get1();
    }
}

五、Nacos 领域模型划分

1、命名空间划分

NameSpace(默认的NameSpace是”public“ NameSpace可以进行资源隔离,比如我们dev环境下的NameSpace下的服务是调用不到prod的NameSpace下的微服务)

(1)创建命名空间

dev 开发环境

test 测试环境

pre 生产环境

(2)配置微服务命名空间

spring:
  application:
    name: order-server
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.177.129:8848
        namespace: 9f5444ba-f5a0-4745-99aa-e15e8cca08cd

2、group划分

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.177.129:8848
        group: group2

六、日志配置

1、局部日志配置

方式一:

(1) 日志级别设置

注意:这里类上没有@Configuration注解

public class FeginConfig {
    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

(2) 配置目标feign

@FeignClient(value = "repository-server",path = "/repositoty",configuration = FeginConfig.class)
public interface RepositotyFeign {
    @GetMapping("/getNum/{goodId}")
    Integer getNum(@PathVariable("goodId") Integer goodId);
}

方式二

feign:
  client:
    config:
      repository-server:
        loggerLevel: debug

2、全局日志配置

(1)添加配置文件

注意:这里类上有@Configuration注解

@Configuration
public class FeginConfig {
    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

(2)将springboot的日志级别调低

logging:
  level:
    com.buba.feign: debug

七、Nacos统一配置管理

一、为什么需要配置中心

配置中心区别于传统的配置信息分散到系统各个角落的方式,对系统中的配置文件进行集中统一管理,而不需要逐一对单个的服务器进行管理。那这样做有什么好处呢?

(1)通过配置中心,可以使得配置标准化、格式统一化

(2)当配置信息发生变动时,修改实时生效,无需要重新重启服务器,就能够自动感知相应的变化,并将新的变化统一发送到相应程序上,快速响应变化。比方说某个功能只是针对某个地区用户,还有某个功能只在大促的时段开放,使用配置中心后只需要相关人员在配置中心动态去调整参数,就基本上可以实时或准实时去调整相关对应的业务。

(3)通过审计功能还可以追溯问题

二、常用的配置中心

微服务中配置中心的主流解决方案主要有三种:Nacos、Apollo、Config+Bus,不过里我们主要介绍 Nacos 作为配置中心的用法。

Nacos 的几个概念

命名空间(Namespace) 命名空间可用于进行不同环境的配置隔离。一般一个环境划分到一个命名空间 配置分组(Group) 配置分组用于将不同的服务可以归类到同一分组。一般将一个项目的配置分到一组 配置集(Data ID) 在系统中,一个配置文件通常就是一个配置集。一般微服务的配置就是一个配置集

三、Nacos配置中心的使用

使用nacos作为配置中心,其实就是将nacos当做一个服务端,将各个微服务看成是客户端,我们将各个微服务的配置文件统一存放在nacos上,然后各个微服务从nacos上拉取配置即可。

(一)properties格式

1、导入依赖

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

2、在配置中心+号新建配置

 

3、修改配置文件名

将项目中 application.yml 修改为 bootstrap.yml

 

4、在微服务中添加nacos config服务地址的配置

5、测试获取注册中心的配置

@RestController
@RequestMapping("user")
public class UserController {
    @Value("${author}")
    private String author;
    @RequestMapping("/get1")
    public String get1(){
        return author;
    }
}

6、可以将数据库的配置移至配置中心,并修改工程中数据源的配置

spring.datasource.druid.url=jdbc:mysql://localhost:3306/nacos?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=123456

当然配置中心配置了,yml文件中就删掉。

7、新增配置类

@Configuration
public class DataSourceConfig {
    @Value("${spring.datasource.druid.username}")
    private String username;
    @Value("${spring.datasource.druid.password}")
    private String password;
    @Value("${spring.datasource.druid.url}")
    private String url;
    @Value("${spring.datasource.druid.driver-class-name}")
    private String driverClassName;
    @Bean
    public DataSource dataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        druidDataSource.setDriverClassName(driverClassName);
        return druidDataSource;
    }
}

可以打断点进行测试,是否获取到dataSource

(二)yaml格式

1、配置中心新建配置

2、修改工程配置文件名为bootstrap.yml并修改配置文件配置

(三)profiles.active—粒度配置

1、配置中心创建配置

Data ID: 服务名-profileN名.后缀名(order-server-mysql.yaml)

2、工程模块配置

spring:
  application:
    name: user-server
  cloud:
    nacos:
      discovery: # 服务注册与发现
        username: nacos
        password: nacos
        server-addr: 192.168.177.129:8848
      config: # 配置中心
        username: nacos
        password: nacos
        server-addr: 192.168.177.129:8848
        file-extension: yaml
        group: group1 # 分组
        namespace: 9f5444ba-f5a0-4745-99aa-e15e8cca08cd # 命名空间
  profiles:
    active: mysql # 粒度配置
server:
  port: ${random.int[1000,9999]}
feign:
  client:
    config:
      default: # 全局,如果单个服务,写服务名称即可(user-server)
        #建立连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间
        connect-timeout: 5000
        #指建立连接后从服务端读取到可用资源所用的时间
        read-timeout: 5000

(四)自定义扩展的 Data Id 配置(共享配置)

当我们微服务的数量越来越多,势必会有相同的配置,这时我们可以将相同的配置抽取出来作为项目中共有的配置,比如集群中的数据源信息、日志的配置信息,nacos 也是支持这种一个配置中心多个配置集这种写法的。

案例演示:

1、在nacos中新建两个 Data ID 分别是 redis.yaml 和 mysql.yaml 的文件。

2、在配置文件中分别加入部分配置内容

redis.yaml

 mysql.yaml

 **3、在 Springboot 项目中添加如下的 nacos 配置:**

整个yml配置:

spring:
  application:
    name: user-server
  cloud:
    nacos:
      discovery: # 服务注册与发现
        username: nacos
        password: nacos
        server-addr: 192.168.177.129:8848
      config: # 配置中心
        username: nacos
        password: nacos
        server-addr: 192.168.177.129:8848
        file-extension: yaml
        extension-configs[0]: # 多个 Data Id的配置
          data-id: redis.yaml
          group: DEFAULT_GROUP # 默认为DEFAULT_GROUP
          refresh: true # 是否动态刷新,默认为false
        extension-configs[1]:
          data-id: mysql.yaml
          group: DEFAULT_GROUP # 默认为DEFAULT_GROUP
          refresh: true # 是否动态刷新,默认为false
#        group: group1 # 分组
#        namespace: 9f5444ba-f5a0-4745-99aa-e15e8cca08cd # 命名空间
  profiles:
    active: mysql # 粒度配置

提示1:多个 Data Id 同时配置时,他的优先级关系是 spring.cloud.nacos.config.ext-config[n].data-id 其中 n 的值越大,优先级越高。

提示2:spring.cloud.nacos.config.ext-config[n].data-id 的值必须带文件扩展名,文件扩展名既可支持 properties,又可以支持 yaml/yml。 此时 spring.cloud.nacos.config.file-extension 的配置对自定义扩展配置的 Data Id 文件扩展名没有影响。

(五)优先级

Nacos Config 目前提供了四种配置能力从 Nacos 拉取相关的配置

A: 通过 spring.cloud.nacos.config.shared-configs[0].dataids 支持多个共享 Data Id 的配置

B: 通过 spring.cloud.nacos.config.extension-configs[0].data-id 的方式支持多个扩展 Data Id 的配置

C: 应用名 user-server.yaml 应用配置

D: 应用名+ Profile user-server-dev.yaml 粒度配置

# 优先级: 粒度配置 > 应用配置 > extension-configs[n]配置(n越大优先级越高) > shared-configs[n]配置(n越大优先级越高)  D > C > B > A

(六)动态配置刷新

注解方式(推荐)

@RestController
@RefreshScope // 在需要动态读取配置的类上添加此注解就可以(动态配置刷新)
@RequestMapping("/nacos-config")
public class NacosConfigController {
    @Value("${config.appName}")
    private String appName;
    //2 注解方式
    @GetMapping("/test")
    public String nacosConfingTest() {
        return appName;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/611352.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跨国企业的组网需求分析

【案例背景】 经济全球化的背景下&#xff0c;跨国企业如何解决数据远距离传输的问题&#xff0c;稳定、安全、快速地搭建企业内网&#xff0c;影响着业务的正常开展。 【客户需求】 这家跨国企业在国内外均有办事处&#xff0c;其中国内的办公人员需要访问位于国外的内部服务…

交直流系统潮流计算(含5种控制模式)matlab代码

目录 1主要内容 2 部分代码 3 程序结果 4 下载链接 1主要内容 该程序参考文献《交直流系统潮流计算及相互关联特性分析》&#xff0c;采用5种交直流潮流控制方式&#xff1a;1.定电流定电压 2.定电流定熄弧角 3.定功率定电压 4.定功率定熄弧角 5.定触发角定电流。以9节点系…

LNMP服务

目录 一、安装Nginx服务 1.编译安装nginx服务 2.添加nginx系统服务 二、安装Mysql服务 1.编译安装mysql服务 2.修改mysql配置文件 3.设置路径环境变量 4.初始化数据库 5.添加mysql系统服务 6.修改mysql 的登录密码 三、安装配置 PHP 解析环境 1.安装环境依赖包 2.编…

【论文阅读】Neuralangelo:高保真神经表面重建

【论文阅读】Neuralangelo&#xff1a;高保真神经表面重建 Abstract1. Introduction2. Related work3. Approach3.1.预备工作3.2.数值梯度计算3.3.渐进细节层次3.4.优化 4. Experiments4.1. DTU Benchmark4.2. Tanks and Temples4.3.细节水平4.4.消融 5. Conclusion paper proj…

(栈和队列) 1047. 删除字符串中的所有相邻重复项 ——【Leetcode每日一题】

❓1047. 删除字符串中的所有相邻重复项 难度&#xff1a;简单 给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回…

小波和小波变换(应试)

零基础小白共计花费2小时38分04秒完成对小波的“平地起高楼”学习。 记录所有学习过程。 一、大致浏览PPT 这个阶段跳着看&#xff0c;太难的跳过 1.总结知识点 共四个部分 1.小波介绍 2.小波变换 小波变换的定义连续小波变换的定义离散小波变换小波重构 3.哈尔小波变换 …

华为OD机试真题 Java 实现【相对开音节】【2022Q4 100分】,附详细解题思路

一、题目描述 相对开音节构成的结构为辅音元音&#xff08;aeiou&#xff09;辅音(r除外)e&#xff0c;常见的单词有life,time,woke,coke,joke,note,nose,communicate&#xff0c;use&#xff0c;gate&#xff0c;same&#xff0c;late等。 给定一个字符串&#xff0c;以空格…

【Python接口自动化】--深入了解HTTP接口基本组成和网页构建原理

目录 引言 1、HTTP简介 2、HTTP原理和网页基础 2.1、 HTTP基本原理 2.2、 HTTP请求过程 2.3、 网页构成 引言 Python接口自动化有着广泛的应用场景&#xff0c;但是在实际使用过程中&#xff0c;可能会出现一些问题。比如&#xff0c;你不知道HTTP接口的基本构成&#xff0…

【Python编程从入门到实践第一版】P2 字符串入门

字符串入门 字符串的表示方法字符串基本函数.title().upper().lower()合并字符串删除空白 字符串&#xff0c;是一种常用的数据类别&#xff0c;而其值&#xff0c;可以顾名思义&#xff0c;是由字符组成的一串&#xff0c;故称为字符串&#xff1b; 字符串的表示方法 单引号、…

Andriod开发 SimpleAdapter BaseAdapter

1.SimpleAdapter 上一篇博客介绍的ArrayAdapter只能接受数组作为数据源&#xff0c;一般用于显示一行文字&#xff0c;更复杂的内容的显示可以用SimpleAdapter来实现。 SimpleAdapter接受List<Map<String, Object>>作为数据源&#xff0c;每个Map对应一个item&am…

为什么Pitch+Deck是创业者必备技能

投资术语简介&#xff1a;Pitch vs Deck vs BP BP以PPT形式出现的阅读式商业计划书&#xff0c;旨在无人讲解的前提下&#xff0c;通过文字和图表阐述项目商业信息。Deck单纯为营销演讲或融资推介所准备&#xff0c;以极少量文字图标和图像的介绍来辅助演讲的幻灯片。Pitch创业…

Spring Security 6.x 系列【52】扩展篇之集成第三方登录组件JustAuth

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列Spring Security 版本 6.1.0 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 简介2. 入门案例3. 流程分析3.1 申请授权3.2 登录4. Spring Security 整…

MySQL 避「坑」指南 —— 你能设置出正确的主键吗?

前言 主键&#xff0c;可以唯一标识表中的某一行&#xff08;记录&#xff09;。合理地设置主键&#xff0c;可以帮助我们准确、快速地找到所需要的数据记录。但是设置出正确的主键似乎并没有那么简单&#xff0c;请思考如下几个问题&#xff1a; 表中的业务字段可以用来做主…

Java-Servlet解析

文章目录 前言Servlet定义内部解析总结servlet接口实际应用的servletGenericServlet类和HttpServlet类 HttpServlet中的设计模式首先看一下模板方法的定义逐步解析 SpringMVC应用 前言 从事Javaweb项目开发有一段时间了&#xff0c;一直不理解它是怎么一回事&#xff0c;后来查…

Fiddler抓包工具之高级工具栏中的Inspectors的使用

高级工具栏中的Inspectors的使用 Inspectors 页签允许你用多种不同格式查看每个请求和响应的内容。JPG 格式使用 ImageView 就可以看到图片&#xff0c;HTML/JS/CSS 使用 TextView 可以看到响应的内容。Raw标签可以查看原始的符合http标准的请求和响应头。Cookies标签可以看到…

【Web服务应用】搭建LNMP架构

搭建LNMP架构 一、编译安装MySQL服务二、安装Nginx服务三、安装配置PHP解析环境四、部署Discuz社区论坛Web应用五、部署博客论坛应用六fpm进程优化 一、编译安装MySQL服务 1.安装MySQL环境依赖包 yum -y install gcc gcc-c ncurses ncurses-devel bison cmake2、创建运行用户 u…

NIMA: Neural Image Assessment

摘要:基于自动学习的图像质量评估技术在评价图像采集管道、存储技术和共享媒体等方面具有广泛的应用价值&#xff0c;近年来已成为图像质量评估研究的热点。尽管这一问题具有主观性&#xff0c;但现有的大多数方法仅对AVA[1]和TID2013[2]等数据集提供的平均意见得分进行预测。我…

电脑怎么录屏?推荐2个好用的win7录屏方法!

案例&#xff1a;win7电脑怎么录屏&#xff1f; 【我的电脑是win7系统&#xff0c;我想录制它的电脑屏幕。有没有小伙伴知道win7电脑怎么录屏&#xff1f;有没有适合win7电脑的录屏工具】 随着数字时代的发展&#xff0c;屏幕录制已经成为一种常见的需求。在教育、演示、游戏…

❤️爆肝熬夜开发了一个基于SSM的办公用品领用系统,现在开源给你!毕设面试学习都不愁了!❤️

大家好&#xff0c;我是兔哥&#xff0c;我又来分享项目啦。 1.写在前面 之前有个粉丝找到我&#xff0c;问有没有什么真正手把手的教SSM框架的视频&#xff0c;说网上找到的大都很复杂或者资料不全。 我说不需要整这么麻烦&#xff0c;我自己给你录一套手把手的教程吧。 ❤…

11.发请求

微信小程序可以请求 HTTPS 类型的接口&#xff08;HTTP不行&#xff09;&#xff0c;请求之前必须将 接口的域名 添加到 信任列表 中 小程序中没有跨域问题&#xff0c;且使用JS原生XML对象发Ajax请求是无效的 目录 1 查看信任的域名 2 添加信任的域名 3 发起GET请求 …