nacos注册中心

发布于:2024-12-18 ⋅ 阅读:(52) ⋅ 点赞:(0)

nacos部署链接:Docker启动安装nacos(详情讲解,全网最细)_docker启动nacos-CSDN博客

nacos表数据链接:nacos数据表创建sql_nacos 建表语句-CSDN博客

nacos部署完成后,http://ip:8848/nacos/index.html

bootstrap.yml和application.yml的区别

 

bootstrap.yml:在 ApplicationContext 初始化之前加载,比 application.yml 更早。适用于引入外部配置中心(如 Nacos、Consul),将配置信息配置在远程配置源时,以便在应用启动时从远程配置中心获取配置的情况下使用

application.yml:在应用启动时加载,通常是在 ApplicationContext 初始化之后适用于配置应用的基本属性等常规单体项目时使用。

bootstrap.yml识别不了,怎么办?

解决方案:SpringBoot不读取bootstrap.yml/properties文件(高版本解决方案)_spring2.7.14版本 war包启动无法加载bootstrap.properties文件-CSDN博客

搭建Nacos服务发现中心

        <!--提供了服务注册、服务发现、配置管理、负载均衡和健康检查等功能-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

 创建命名空间

8387175193194c7aa9b385a44301dacd.png

#微服务配置
spring:
  application:
    name: content-api #项目名称
  cloud:
    nacos:
      server-addr: 124.70.208.223:8848 #nacos的访问地址
      discovery:
        namespace: dev #命名空间(上一步创建的)
        group: xuecheng-plus-project #整个大项目的名字(也可以自己取名)

重新 启动项目后,就可以看到注册成功了

6c91d1e58ef4428092f436e1e9aa7cfd.png

搭建Nacos为配置中心

配置管理注解

        <!--将应用程序的配置从本地文件迁移到外部配置中心,实现配置的集中管理和动态刷新。-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

nacos如何去定位一个具体的配置文件呢?

即:namespace、group、dataid.

1、通过namespace、group找到具体的环境和具体的项目。

2、通过dataid找到具体的配置文件,dataid有三部分组成

比如:content-service-dev.yaml配置文件  由(content-service)-(dev). (yaml)三部分组成

content-service:第一部分,它是在application.yaml中配置的应用名,即spring.application.name的值。

dev:第二部分,它是环境名,通过spring.profiles.active指定,

Yaml: 第三部分,它是配置文件 的后缀,目前nacos支持properties、yaml等格式类 

54a22230d3194beba26237b574e25326.png

 此时就可以将本地的配置,如mysql连接的配置,交由nacos管理(注意复制上去时不要掉了spring:)

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://124.70.208.223:3306/xcplus_content?serverTimezone=UTC&useUnicode=true&useSSL=false
    username: root
    password: root
logging:
  config: classpath:log4j2-dev.xml
server:
  servlet:
    context-path: /content
  port: 63040

a0397cae9e3b408bb2da3d1cdab4adb0.png

 本地只需要保留这些配置,用户指定运行环境和nacos地址


#微服务配置
spring:
  application:
    name: content-api # 微服务名称
  cloud:
    nacos:
      server-addr: 124.70.208.223:8085
      discovery:
        namespace: dev  # Nacos 服务管理的命名空间,用于隔离不同环境的服务
        group: xuecheng-plus-project  # Nacos 服务发现的组名,用于进一步隔离服务
      config:
        namespace: dev  # Nacos 配置管理的命名空间,用于隔离不同环境的配置
        group: xuecheng-plus-project  # Nacos 配置管理的组名,用于进一步隔离配置
        file-extension: yaml  # Nacos 配置文件的扩展名,这里指定为 YAML 格式
        refresh-enabled: true  # 是否启用配置的动态刷新功能
  profiles:
    active: dev # 指定当前环境为开发环境

部署完成后重新运行程序,依旧生效

公共配置

  • shared-configs 适用于多个应用都需要的一些通用配置,例如数据库连接池配置、日志配置等。

在我们的项目中,有一些公共的配置,在任何模块中可能都会用到,我们可以将他单独提取出来。如:日志信息

7624ee18c8184cdcbc8bcd5b52f0b401.png

 

 使用shared-configs属性,引用该配置

spring:
  application:
    name: content-service
  cloud:
    nacos:
      server-addr: 124.70.208.223:8085
      config:
        namespace: dev
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true
        shared-configs:
          - data-id: logging-${spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true
  profiles:
    active: dev

 

 扩展配置

extension-configs: 适用于需要为特定应用添加额外配置的情况,例如某些特殊的功能配置或环境变量。

extension-configs与shared-configs作用一样,语义不同

spring:
  application:
    name: content-api # 微服务名称
  cloud:
    nacos:
      server-addr: 124.70.208.223:8085
      discovery:
        namespace: dev  # Nacos 服务管理的命名空间,用于隔离不同环境的服务
        group: xuecheng-plus-project  # Nacos 服务发现的组名,用于进一步隔离服务
      config:
        namespace: dev  # Nacos 配置管理的命名空间,用于隔离不同环境的配置
        group: xuecheng-plus-project  # Nacos 配置管理的组名,用于进一步隔离配置
        file-extension: yaml  # Nacos 配置文件的扩展名,这里指定为 YAML 格式
        refresh-enabled: true  # 是否启用配置的动态刷新功能
        extension-configs:
          - data-id: logging-${spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true

配置优先级

默认情况下,各配置文件 的优先级:项目应用名配置文件 > 扩展配置文件  > 共享配置文件 > 本地配置文件。

为了方便,我们一般会在nacos中配置本地优先

#配置本地优先
spring:
 cloud:
  config:
    override-none: true

 abbf5324c848431e803e830c22069ae1.png

网关 

单独创建一个模块,配置网关

 

         <!--网关-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <!--服务发现中心-->
        <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>

 

#微服务配置
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: 124.70.208.223:8085
      discovery:
        namespace: dev
        group: xuecheng-plus-project
      config:
        namespace: dev
        group: xuecheng-plus-project
        file-extension: yaml
        refresh-enabled: true
        shared-configs:
          - data-id: logging-${spring.profiles.active}.yaml
            group: xuecheng-plus-common
            refresh: true
  profiles:
    active: dev

所以的网关相关配置全部配置到nacos中,创建gateway-dev.yaml 

34f8812d20cd41f292101253b70075b5.png

server:
  port: 63010 # 网关端口
spring:
  cloud:
    gateway:
#      filter:
#        strip-prefix:
#          enabled: true
      routes: # 网关路由配置
        - id: content-api # 路由id,自定义,只要唯一即可
          # uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
          uri: lb://content-api # 路由的目标地址 lb就是负载均衡,后面跟服务名称
          predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
            - Path=/content/** # 这个是按照路径匹配,只要以/content/开头就符合要求
#          filters:
#            - StripPrefix=1
        - id: system-api
          # uri: http://127.0.0.1:8081
          uri: lb://system-api
          predicates:
            - Path=/system/**
#          filters:
#            - StripPrefix=1
        - id: media-api
          # uri: http://127.0.0.1:8081
          uri: lb://media-api
          predicates:
            - Path=/media/**
#          filters:
#            - StripPrefix=1