Spring Cloud2024.x实战 | nacos系列 | 第2篇: springcloud整合配置中心nacos2.5.1

1 为什么需要配置中心?

	把配置信息写在nacos配置中心里,相比于把配置信息写在application.yml等配置文件里,有以下好处:
  • 实时生效:在 application.yml 中配置的参数,若要修改就必须重启应用程序。而 Nacos 配置中心支持动态配置更新,当配置发生变更时,应用程序能实时感知到并自动更新配置,无需重启,从而保证系统的高可用性和不间断运行。例如,在电商系统中,促销活动的折扣率、限时抢购的时间范围等配置随时可能调整,使用 Nacos 配置中心就能快速响应这些变化,及时生效。
  • 统一维护:对于微服务架构而言,每个服务都有自己的配置文件,管理起来较为繁琐。Nacos 配置中心可以把所有服务的配置集中管理,提供统一的界面和 API 来进行配置的增删改查操作,提升了配置管理的效率和可维护性。比如,在一个包含多个微服务的项目中,数据库连接信息、缓存服务器地址等公共配置可以统一存放在 Nacos 中,方便统一修改和维护。
  • 版本控制:Nacos 配置中心支持配置的版本管理,你能够查看配置的历史版本,回滚到之前的某个版本。这在配置修改出现问题时非常有用,可以快速恢复到正常状态。
  • 多环境配置:在不同的环境(如开发、测试、生产)中,应用程序的配置可能存在差异。Nacos 配置中心支持多环境配置管理,你可以为每个环境创建独立的配置集,并且可以设置配置的继承关系,减少配置的重复编写。

2 springcloud与nacos的版本兼容对照表

Spring Cloud Alibaba Version Spring Cloud Version Spring Boot Version Nacos Version Dubbo Version Seata Version RocketMQ Version Sentinel Version
2021.0.5.0 2021.0.5 2.6.13 2.2.3
2021.0.9 2021.0.9 2.7.18 2.2.3
2023.0.1.2 2024.0.1 3.4.4 2.5.1

注:以上3种版本组合是我在公司实战项目中使用过的版本组合。

3 nacos管理后台使用操作

3.1 配置命名空间

对于一个新项目,分别添加开发、测试、生产、公共配置命名空间。比如,对于xxx项目,可添加如下几个命名空间tyjt-dev、tyjt-test、tyjt-prod、tyjt-common:

配置命名空间

2.2 配置用户

对于不同开发部署环境,分别创建一个自己的用户,方便隔离管理。比如分别添加用户tyjt-dev、tyjt-test、tyjt-prod:

配置用户

2.3 配置角色

针对不同的用户,添加不同的角色,做到角色细化管控。比如分别添加角色ROLE_TYJT_DEV、ROLE_TYJT_TEST、ROLE_TYJT_PROD,并分别赋给对应的用户:

配置角色

2.4 配置权限

针对不同的角色,添加不同的权限,做到权限细化管控。比如分别添加权限,并分别赋给对应的角色,并指明能访问哪些资源以及对应的能否读写操作:

配置权限

2.5 添加不同环境配置

2.5.1 配置dev开发环境

配置dev开发环境

配置文件内容如下:

server:
  port: 45000

#HBase
hbase:
  config:
    hbase:
      zookeeper:
        property:
          clientPort: 2181
        quorum: hbase01   #HBase主机IP
    zookeeper:
      znode:
        parent: /hbase

#swagger文档开启/关闭
springfox:
  documentation:
    auto-startup: true
#knife4j
knife4j:
  production: false # 开启/屏蔽文档资源

mqtt:
  # mqtt入站(即根据topic订阅mqtt里的消息数据)
  inbound:
    clientId: mqtt-in-dev
    #公网地址
    #urls: tcp://xxx:1883
    #内网地址
    urls: tcp://172.16.250.134:8083
    username: admin
    password: xxx
    topics:
      points:
        - road/BGFusionSSM
      cars:
        - isaelocation_fake
  # mqtt出站(即发送数据到mqtt服务器)
  outbound:
    clientId: mqtt-out-dev
    password: xxx
    #若不指定topic则默认通过 /xyz/2w1/12q 来发送消息到mqtt服务器
    topic: xyz/2w1/12q
    urls: tcp://172.16.250.134:1883
    username: admin

sys:
  pack:
    for:
      algorithm:
        periodMills: 30000  #每此打包多少时间的数据供算法调用(毫秒), 测试设备和测试点位的数据在内存中的保存时间应该=此数据*1.5
        cacheMills: 50000  #供算法调用的数据在内存里边的缓存时间(毫秒),一般应该是period*1.5
        radius: 0.2  #算法只检索车辆200m范围内的测试点位(km)

spring:
  #spring boot admin配置
  boot:
    admin:
      client:
        # 指定admin-server的地址
        url: http://localhost:${
   server.port}/monitor # 提供监控服务的地址
      context-path: /monitor

  redis:
    host: 172.16.250.84
    port: 6379
    distance: 8
    database: 11
    password: xxx
    timeout: 10000ms
    lettuce:
      pool:
        max-active:  100 # 连接池最大连接数(使用负值表示没有限制)
        max-idle: 100 # 连接池中的最大空闲连接
        min-idle: 50 # 连接池中的最小空闲连接
        max-wait: 6000ms # 连接池最大阻塞等待时间(使用负值表示没有限制)

  kafka:
    bootstrap-servers: 172.16.250.84:9092
    producer:
      retries: 0
      batch-size: 16384
      buffer-memory: 33554432
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
    consumer:
      group-id: xjcloudtrack-prod
      # 手动提交
      enable-auto-commit: false
      auto-offset-reset: latest
      key-deserializer: org.apache.kafka.common.serialization.ByteArrayDeserializer
      value-deserializer: org.apache.kafka.common.serialization.ByteArrayDeserializer
      properties:
        session.timeout.ms: 60000
    listener:
      log-container-config: false
      concurrency: 5
      # 手动提交
      ack-mode: manual_immediate

  # 数据库连接信息
  datasource:
    # 指定数据源为 DruidDataSource,默认值为 HikariDataSource
    #type: com.zaxxer.hikari.HikariDataSource
    type: com.alibaba.druid.pool.DruidDataSource
    dynamic:
      primary: master #设置默认的数据源或者数据源组
      strict: false
      datasource:
        master:
          # driver-class需要注意mysql驱动的版本(com.mysql.cj.jdbc.Driver 或 com.mysql.jdbc.Driver)
          driver-class-name: com.p6spy.engine.spy.P6SpyDriver
          url: jdbc:p6spy:mysql://172.16.250.84:3306/xxx?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai
          username: root
          password: xxx
    druid:
      #初始连接数
      initial-size: 5
      #最小连接数
      min-idle: 5
      #最大连接数
      max-active: 20
      #最大等待时间,单位为毫秒
      max-wait: 60000

      #空闲连接最小保留时间,单位为毫秒
      min-evictable-idle-time-millis: 30000
      #检测空闲连接间隔时间,如果连接空闲时间大于等于min-evictable-idle-time-millis则回收连接
      time-between-eviction-runs-millis: 20000
      #是否回收空闲连接,增强time-between-eviction-runs-millis
      remove-abandoned: true
      #空闲连接回收时,是否打印日志
      log-abandoned: true
      #空闲连接回收超时时间,单位为毫秒
      remove-abandoned-timeout-millis: 30000
      #空闲连接保持时间,单位为毫秒
      keep-alive-between-time-millis: 30000
      #是否保持连接有效,当连接空闲时间大于等于keep-alive-between-time-millis,小于min-evictable-idle-time-millis时生效
      keep-alive: true

      #检测连接是否有效查询
#      validation-query: # select 1 或者 或者 SELECT 1 FROM DUAL,设置为空是为了防止不停的刷日志
      #检测连接是否有效查询超时时间,单位为秒
      validation-query-timeout: 1
      #是否在申请连接时执行validation-query
      test-on-borrow: false
      #是否在归还连接时执行validation-query
      test-on-return: false
      #是否在申请连接时进行检测,如果空闲时间大于等于min-evictable-idle-time-millis,执行validation-query
      test-while-idle: true

      #是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说Oracle。在MySQL下建议关闭
      pool-prepared-statements: false
      #最大缓存数量,当大于0时,pool-prepared-statements会自动修改为true
      max-pool-prepared-statement-per-connection-size: 0

      #是否合并多数据源的监控数据
      use-global-data-source-stat: true

      #配置扩展插件,stat(监控统计),Slf4j(日志),waLL(防御SQL注入)
      filters: stat,slf4j,wall

      #监控页面配置
      stat-view-servlet:
        #是否启用监控页面配置
        enabled: true
        #监控页面路径
        url-pattern: /druid/*
        #用户名
        login-username: druid
        #密码
        login-password: 123456
        #是否允许重置
        reset-enable: false
        #白名单
        allow: 127.0.0.1
        #黑名单(IP在黑名单与白名单共同存在时,优先黑名单)
        deny:

      #Web统计过滤器配置
      web-stat-filter:
        #是否启用Web统计过滤器配置
        enabled: true
        #添加过滤规则
        url-pattern: /*
        #忽略过滤格式
        exclusions: /druid/*,*.js,*.gif,*.jpg,*.jpeg,*.png,*.css,*.ico
        #是否启用会话统计功能
        session-stat-enable: true
        #最大会话统计数量
        session-stat-max-count: 1000

      #过滤器配置
      filter:
        slf4j:
          statement-create-after-log-enabled: false
          statement-close-after-log-enabled: false
          result-set-open-after-log-enabled: false
          result-set-close-after-log-enabled: false
        #SQL统计过滤器配置
        stat:
          #是否启用SQL统计过滤器配置
          enabled: true
          db-type: mysql
          #是否启用慢SQL日志记录
          log-slow-sql: true
          #慢SQL执行时间,单位为毫秒
          slow-sql-millis: 5000
          #是否合并相同SQL
          merge-sql: true
        wall:
          enabled: true
          db-type: mysql
          config:
            multi-statement-allow: true

decorator:
  datasource:
    p6spy:
      #      logging: slf4j
      log-file: ./log/spy.log
    #      log-format: executionTime:%(executionTime) | sql:%(sqlSingleLine)
    enabled: true

oso:
  kafka:
    consumer:
      topic: rs-DataAdapter-tracking_fake
  point:
    online:
      position:
        enable: true
      schedule:
        fixedRate: 10000  #单位为秒,即定时任务检测点位在线状态的频率是10s
        initialDelay: 1000  #延迟1s开始执行
      timeSlot: 60000 #查找最近60s内的数据
    coordinate-origin:
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhuzhongji

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值