• nacos做服务配置和服务器发现


    一、创建项目

    • 1、创建一个spring-boot的项目

    • 2、创建三个模块filesystemgateway模块

    • 3、filesystem分别配置启动信息,并且创建一个简单的控制器

      server.port=9000
      spring.application.name=file
      server.servlet.context-path=/file
      
      • 1
      • 2
      • 3
    • 4、在根目录下引入依赖

      <properties>
          <java.version>1.8java.version>
          <spring-cloud.version>2021.0.8spring-cloud.version>
      properties>
      
      ...
      <dependencyManagement>
          <dependencies>
              <dependency>
                  <groupId>org.springframework.cloudgroupId>
                  <artifactId>spring-cloud-dependenciesartifactId>
                  <version>${spring-cloud.version}version>
                  <type>pomtype>
                  <scope>importscope>
              dependency>
          dependencies>
      dependencyManagement>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
    • 5、在网关模块引入依赖包

      <dependencies>
          <dependency>
              <groupId>org.springframework.cloudgroupId>
              <artifactId>spring-cloud-starter-gatewayartifactId>
          dependency>
      dependencies>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 6、网关模块的application.properties配置

      server.port=8000
      spring.application.name=gateway
      server.servlet.context-path=/gateway
      spring.main.web-application-type=reactive 
      
      # 注册一个服务
      spring.cloud.gateway.routes[0].id=system
      spring.cloud.gateway.routes[0].uri.=http://localhost:9001
      spring.cloud.gateway.routes[0].predicates[0].name=Path
      spring.cloud.gateway.routes[0].predicates[0].args[0]=/system/**
      # 注册一个服务
      spring.cloud.gateway.routes[1].id=file
      spring.cloud.gateway.routes[1].uri.=http://localhost:9000
      spring.cloud.gateway.routes[1].predicates[0].name=Path
      spring.cloud.gateway.routes[1].predicates[0].args[0]=/file/**
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
    • 7、分别启动三个项目,测试单独接口请求、使用网关的路由请求是否通的

      • http://localhost:9000/file/hello
      • http://localhost:9001/system/hello1
      • http://localhost:8000/file/hello
      • http://localhost:9000/system/hello1

    二、nacos的安装

    • 1、官网地址下载,根据不同电脑系统下载不同包,解压进入到bin目录下,前提电脑上要安装jdk

      # 我这边是window电脑
      startup.cmd -m standalone
      
      • 1
      • 2
    • 2、使用docker安装

      docker search nacos
      docker pull nacos/nacos-server
      
      • 1
      • 2
      mkdir -p /home/docker/nacos/conf
      mkdir -p /home/docker/nacos/data
      mkdir -p /home/docker/nacos/logs
      chmod a+w /home/docker/nacos
      
      • 1
      • 2
      • 3
      • 4
      docker run -it --name nacos \
      -p 8848:8848 \
      -e MODE=standalone \
      -v /home/docker/nacos/conf/data:/home/nacos/conf/data \
      -v /home/docker/nacos/conf/logs:/home/nacos/conf/logs \
      -d nacos/nacos-server
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      如果需要认证的话,请添加application.properties文件

      docker run -it --name nacos \
      -p 8848:8848 \
      -e MODE=standalone \
      -v /home/docker/nacos/conf/application.properties:/home/nacos/conf/application.properties \
      -v /home/docker/nacos/conf/data:/home/nacos/conf/data \
      -v /home/docker/nacos/conf/logs:/home/nacos/conf/logs \
      -d nacos/nacos-server
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

    三、使用nacos做配置中心

    • 1、在需要获取nacos的项目中添加依赖包

       
      <dependency>
          <groupId>com.alibaba.cloudgroupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
          <version>2.2.3.RELEASEversion>
      dependency>
      
      <dependency>
          <groupId>org.springframework.cloudgroupId>
          <artifactId>spring-cloud-starter-bootstrapartifactId>
      dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    • 2、在这里以system模块介绍,在resources目录下创建一个bootstrap.properties文件

      # 注册中心的名字
      spring.application.name=system
      # 启动环境,nacos会根据环境来读取不同的配置dataId:system-dev.properties
      spring.profiles.active=dev
      # nacos的地址
      spring.cloud.nacos.config.server-addr=localhost:8848
      # 配置中心文件后缀名
      spring.cloud.nacos.config.file-extension=properties
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    • 3、在nacos控制面板上创建一个配置文件

      在这里插入图片描述

      test.nacos=hello1234566
      
      • 1
    • 4、在项目的application.properties中添加test.nacos的配置,值随意

      server.port=9001
      #spring.application.name=system
      server.servlet.context-path=/system
      
      test.nacos=hello
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • 5、在system的控制器中获取配置文件

      package com.example.controller;
      
      import org.springframework.beans.factory.annotation.Value;
      import org.springframework.cloud.context.config.annotation.RefreshScope;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.RestController;
      
      @RestController
      @RefreshScope
      public class HelloController {
          @Value("${test.nacos}")
          private String nacosName;
      
          @GetMapping("hello1")
          public String hello() {
              System.out.println(nacosName+"=====");
              return "System Hello";
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
    • 6、在nacos上修改配置文件查看是否获取到最新的配置数据

    四、多环境配置

    • 1、手动添加启动变量

      在这里插入图片描述

      在这里插入图片描述

    • 2、配置生产启动

      -Dspring.profiles.active=prod
      
      • 1

      在这里插入图片描述

    • 3、在nacos中拷贝一份生产的配置文件

      在这里插入图片描述

    • 4、修改点system-prod.properties的数据,启动system项目

    在这里插入图片描述

    • 5、请求接口看看配置文件读取的是否为生产的配置文件

    五、命名空间

    • 1、也许你一个公司就一个项目,那么在nacos直接使用public这个默认的命名空间也可以,如果一个公司有多个项目,每个项目都有不同配置文件,这时候就要使用命名空间,简单理解就一个项目就是一个命名空间

    • 2、比如我创建一个test1的命名空间,里面创建2个配置文件

      在这里插入图片描述

    • 3、在spring-boot项目中使用命名空间来读取配置文件

      # 注册中心的名字
      spring.application.name=system
      # 启动环境,nacos会根据环境来读取不同的配置dataId:system-dev.properties
      spring.profiles.active=dev
      # nacos的地址
      spring.cloud.nacos.config.server-addr=localhost:8848
      # 配置中心文件后缀名
      spring.cloud.nacos.config.file-extension=properties
      # 读取命名空间的配置
      spring.cloud.nacos.config.namespace=test1
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

    六、使用nacos实现注册中心

    • 1、因为所有的模块都要在nacos中注册,因此直接在跟模块下引入依赖包,上面的配置中心的依赖也可以全部到跟模块中引入

      <dependency>
          <groupId>com.alibaba.cloudgroupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
          <version>2.2.3.RELEASEversion>
      dependency>
      <dependency>
          <groupId>org.springframework.cloudgroupId>
          <artifactId>spring-cloud-starter-bootstrapartifactId>
      dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    • 2、在bootstrap.properties文件中添加以下2行代码就可以

      # 服务注册
      spring.cloud.nacos.discovery.server-addr=localhost:8848
      spring.cloud.nacos.discovery.namespace=test1
      
      • 1
      • 2
      • 3
    • 3、如果当前是网关模块就要多添加一个负载均衡的依赖

      <dependencies>
          <dependency>
              <groupId>org.springframework.cloudgroupId>
              <artifactId>spring-cloud-starter-gatewayartifactId>
          dependency>
      
          <dependency>
              <groupId>org.springframework.cloudgroupId>
              <artifactId>spring-cloud-starter-loadbalancerartifactId>
          dependency>
      dependencies>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    • 4、启动服务,查看nacos控制面板

      在这里插入图片描述

    • 5、多启动一台system的项目,只要在启动的时候修改启动端口号就可以

    在这里插入图片描述

    • 6、这时候就可以修改网关地址,由之前的localhost改为lb的方式

      server.port=8000
      spring.application.name=gateway
      server.servlet.context-path=/gateway
      spring.main.web-application-type=reactive 
      
      # 注册一个服务
      spring.cloud.gateway.routes[0].id=system
      #spring.cloud.gateway.routes[0].uri.=http://localhost:9001
      spring.cloud.gateway.routes[0].uri=lb://system
      spring.cloud.gateway.routes[0].predicates[0].name=Path
      spring.cloud.gateway.routes[0].predicates[0].args[0]=/system/**
      # 注册一个服务
      spring.cloud.gateway.routes[1].id=file
      #spring.cloud.gateway.routes[1].uri.=http://localhost:9000
      spring.cloud.gateway.routes[1].uri=lb://file
      spring.cloud.gateway.routes[1].predicates[0].name=Path
      spring.cloud.gateway.routes[1].predicates[0].args[0]=/file/**
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
    • 7、测试使用网关请求是否可以

    七、完善openfeig

    • 1、使用使用openfeig请求别的服务的方法

    • 2、由之前的写法改为下面的写法

      @FeignClient(name = "system", url = "http://localhost:9001/system")
      public interface FeignSystemHello {
          /**
           * 别的地方调用hell1方法的时候就会调用http://localhost:9001/system/hello路由
           * @return
           */
          @GetMapping("hello1")
          String hello1();
      }
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      @FeignClient("system")
      public interface FeignSystemHello {
          @GetMapping("system/hello1")
          String hello1();
      }
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 3、测试请求地址http://localhost:8000/file/systemHello

    • 4、上面可能会报错,需要再根目录的pom.xml中排除一个东西

      <dependency>
          <groupId>com.alibaba.cloudgroupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
          <version>2.2.3.RELEASEversion>
          <exclusions>
              <exclusion>
                  <groupId>org.springframework.cloudgroupId>
                  <artifactId>spring-cloud-starter-netflix-ribbonartifactId>
              exclusion>
          exclusions>
      dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    • 5、在system的测试控制器中使用环境变量获取当前端口

      @RestController
      @RefreshScope
      public class HelloController {
          @Value("${test.nacos}")
          private String nacosName;
      
          @Autowired
          Environment environment;
      
          @GetMapping("hello1")
          public String hello() {
              String port = environment.getProperty("local.server.port");
              System.out.println(nacosName+"=====");
              return "System Hello" + port;
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16

    八、修改nacos使用账号密码登录

    • 1、修改/nacos/conf/application.properties

    在这里插入图片描述

    • 2、但是开启登录功能就要配置下面的值,在线工具

      nacos.core.auth.caching.enabled=true
      
      nacos.core.auth.server.identity.key=nacos
      nacos.core.auth.server.identity.value=nacos
      
      nacos.core.auth.plugin.nacos.token.secret.key=OGQ2ZTNmMDQ4MjVjNGQ0OTg4YzZjMGE1NDE4MDgwMTE=
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    • 3、进入桌面端再来修改账号和密码

  • 相关阅读:
    金仓数据库 KDTS 迁移工具使用指南 (4. BS 版使用说明)
    C++17 新特性
    Add the installation prefix of “Qt5“ to CMAKE_PREFIX_PATH or set “Qt5_DIR“解决
    springboot学生成绩课堂表现过程性评价系统java
    apijson 初探
    win10中ros与ubuntu中ros通信
    埃隆·马斯克的 AI 聊天机器人 Grok 已经上线
    k8s实战系列:3-存储的花样玩法(上)
    核工程行业数字化转型----工业软件讲坛第十次讲座
    物联网硬件设计开发全攻略:十大关键阶段深度解析
  • 原文地址:https://blog.csdn.net/kuangshp128/article/details/134314654