侧边栏壁纸
博主头像
王小木人个人技术文章记录

这是很长,很好的一生

  • 累计撰写 141 篇文章
  • 累计创建 43 个标签
  • 累计收到 10 条评论

目 录CONTENT

文章目录

使用nacos作为配置中心

王小木人个人技术文章记录
2021-07-13 / 0 评论 / 0 点赞 / 3,235 阅读 / 3,946 字

nacos作为配置中心

nacos 除了可以作为注册中心实现服务的注册与发现外同样可以作为配置中心,方便微服务中统一配置和修改。

搭建

基于provider生产者的微服务,删除配置文件 application.yml,新建bootstrap.yml,其中bootstrap.yml 的优先级要高于application.yml 的,内容如下

spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        prefix: nacos-provider
  profiles:
    active: dev
  application:
    name: nacos-provider
server:
  port: 8001

20210713_1103.png

spring.cloud.nacos.config.server-addr=127.0.0.1:8848,表示微服务从哪个配置中心上拉取配置;

spring.cloud.nacos.config.file-extension=yaml,表示文件的扩展名;

spring.cloud.nacos.config.prefix=nacos-provider,表示当前服务向配置中心索要 nacos-provider 的配置;

prefix 默认为 spring.application.name 的值,没有的话就是spring.application.name 的值,也可以通过配置

spring.profiles.active=dev,表示像配置中心索要哪个环境的配置;

在 Nacos Spring Cloud 中,dataId 的完整格式如下

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

以上配置,向配置中心拉取的配置的 dataId 的名称为: nacos-provider-dev.yaml

在pom.xml中新加两个依赖

<!--配置服务所需依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--springcloud高版本默认不加载bootstrap.yml文件,需要在pom里加上依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

完整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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.springcloud</groupId>
    <artifactId>provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>provider</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <spring-boot.version>2.4.4</spring-boot.version>
        <spring-cloud.version>2020.0.2</spring-cloud.version>
        <spring-cloud-alibaba.version>2020.0.RC1</spring-cloud-alibaba.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- spring boot 依赖 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- spring cloud 依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- spring cloud alibaba 依赖 -->
            <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>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos 服务注册发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
       <!--配置服务所需依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--springcloud高版本默认不加载bootstrap.yml文件,需要在pom里加上依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

在controller上增加注解 @RefreshScope,让服务可以刷新修改的配置,接口读取 配置文件名为 username 的值并输出

20210713_1114.png

再启动 nacos,在配置列表新建一个Data ID为 nacos-provider-dev.yaml,配置格式为yaml的配置文件,里面只有一个username,也是我们服务需要读取并输出的。

20210713_1118.png

20210713_1120.png

启动服务provider,访问接口 http://localhost:8001/hello

20210713_1141.png

这时看到接口正确读取到了username: nacosprovider,到此全部结束。

需要注意下的是springcloud高版本默认不加载bootstrap.yml文件,需要在pom里加上依赖

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

项目下载地址

服务提供方:https://github.com/378526425/springcloud-provider.git (nacos-config分支)

Spring Cloud微服务架构设计与开发实战

0

评论区