长春企业网站设计,上海松江区做网站的公司,wordpress 托管主机,做网站还赚钱么文章目录 NacosNacos 配置中心1.起源2.基本概念ProfileData IDGroup 3.基础配置a. bootstrap.ymlb. application.ymlc. nacos 中的配置 DataIDd.测试读取配置中心配置内容 4.配置隔离a.命名空间b.DataIDc.bootstrap.ymld.service 隔离 5.配置拆分a.配置拆分策略b.DataID 配置c.… 文章目录 NacosNacos 配置中心1.起源2.基本概念ProfileData IDGroup 3.基础配置a. bootstrap.ymlb. application.ymlc. nacos 中的配置 DataIDd.测试读取配置中心配置内容 4.配置隔离a.命名空间b.DataIDc.bootstrap.ymld.service 隔离 5.配置拆分a.配置拆分策略b.DataID 配置c.配置文件 bootstrap.yml Nacos
Nacos 配置中心
在 Spring Boot 项目中默认会提供一个 application.properties 或者 application.yml 文件
可以把一些全局性的配置或者需要动态维护的配置写入改文件比如数据库连接功能开关限流阈值服务地址等。
为了解决不同环境下服务连接配置等信息的差异Spring Boot 还提供了基于 spring.profiles.active{profile}的机制来实现不同的环境的切换。
1.起源
随着单体架构向微服务架构的演进各个应用自己独立维护本地配置文件的方式开始显露出它的不足之处。
主要有下面几点: 配置的动态更新在实际应用会有动态更新位置的需求比如修改服务连接地址、限流配置等。在传统模式下需要手动修改配置文件并且重启应用才能生效这种方式效率太低重启也会导致服务暂时不可用。 配置集中式管理在微服务架构中某些核心服务为了保证高性能会部署上百个节点如果在每个节点中都维护一个配置文件一旦配置文件中的某个属性需要修改可想而知工作量是巨大的。 不同部署环境下配置的管理前面提到通过 profile 机制来管理不同环境下的配置这种方式对于日常维护来说也比较繁琐。
统一配置管理就是弥补上述不足的方法。
简单说是把各个应用系统中的某些配置放在一个第三方中间件上进行统一维护。
然后对于统一配置中心上的数据的变更需要推送到相应的服务节点实现动态跟新所以微服务架构中配置中心也是一个核心组件。
2.基本概念
Profile
Java 项目一般都会有多个 Profile 配置用于区分开发环境测试环境准生产环境生成环境等
每个环境对应一个 properties 文件或是 yml/yaml 文件然后通过设置 spring.profiles.active 的值来决定使用哪个配置文件。
spring:application:name: order-serviceprofiles:active: devNacos Config的作用就把这些文件的内容都移到一个统一的配置中心即方便维护又支持实时修改后动态刷新应用。
Data ID
当使用 Nacos Config 后Profile 的配置就存储到 Data ID 下即一个 Profile 对应一个 Data ID
Data ID 的拼接格式${prefix}-${spring.profiles.active}.${file-extension}prefix 默认为 spring.application.name 的值也可以通过配置项 spring.cloud.nacos.config.prefix 来配置spring.profiles.active 取 spring.profiles.active 的值即为当前环境对应的 profile当 spring.profiles.active 为空时对应的连接符 - 也将不存在dataId 的拼接格式变成 ${prefix}.${file-extension}file-extension 为配置内容的数据格式可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
Group
当配置项太多或者有重名时可以通过分组来方便管理 这就是 Group
Group 默认为 DEFAULT_GROUP
可以通过 spring.cloud.nacos.config.group 来配置
3.基础配置
nacos 可以作为配置中心使用在 payment 工程中如下步骤启动 nacos 配置中心
a. bootstrap.yml
注意Sprnig Boot 2.4.X 版本后需要手动添加 spring-cloud-starter-bootstrap 组件后才能加载 bootstrap.yml 配置文件
!--nacos--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discoveryartifactId
/dependency
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-configartifactId
/dependencybootstrap.yml:
spring:application:name: payment-serviceprofiles:active: devcloud:nacos:discovery:server-addr: 192.168.146.128:8848config:file-extension: yamlserver-addr: 192.168.146.128:8848注意spring.cloud.nacos.config 配置必须放到 bootstrap.yml 配置文件中保证在优先读取配置文件再启动否则配置无效 b. application.yml
server:port: ${port:9001}spring:application:name: payment-servicecloud:nacos:discovery:server-addr: 192.168.146.128:8848 # Nacos注册中心地址c. nacos 中的配置 DataID spring:application:name: payment-serviceprofiles:active: devmain:allow-bean-definition-overriding: true #允许覆盖bean定义cloud:nacos:discovery:server-addr: 192.168.146.128:8848config:file-extension: yamlserver-addr: 192.168.146.128:8848prefix: payment-service-devshared-configs[0]:data-id: common.yamlgroup: DEFAULT_GROUPrefresh: trued.测试读取配置中心配置内容
PaymentController
package com.nianxi.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** author Jie.* description: TODO* date 2024/11/14* version: 1.0*/
RestController
RequestMapping(/payment)
RefreshScope // 支持Nacos的动态刷新功能
public class PaymentController {Value(${server.port})private String serverPort;GetMapping(/{id})public ResponseEntityString payment(PathVariable(id) Long id) {return ResponseEntity.ok(订单号 id 支付成功server.port serverPort);}Value(${config.info})private String configInfo;GetMapping(/config/info)public String getConfigInfo() {return configInfo;}
}访问地址http://localhost:9001/payment/config/info
当修改配置值会结果已经改变Nacos 自带自动刷新功能。 4.配置隔离
通常企业研发的流程是这样的先在开发测试环境开发和测试功能然后灰度最后发布到生产环境。
并且为了生产环境的稳定需要将测试环境和生产环境进行隔离Nacos 可以通过三种方式进行配置隔离
Nacos 的服务器namespace 命名空间group 分组
在 bootstrap.yml 文件中可以通过配置 Nacos 的 server-addr、namespace 和 group 来区分不同的配置信息。
Nacos 的服务器 spring.cloud.nacos.config.server-addrNacos 的命名空间 spring.cloud.nacos.config.namespace注意这里使用命名空间的 ID 不是名称Nacos 的分组 spring.cloud.nacos.config.group
Nacos 配置隔离具体步骤如下:
a.命名空间
创建 dev,test,prod
b.DataID
在不同命名空间下创建如下 DataID克隆即可 注意稍微更改各自配置信息以作区别
c.bootstrap.yml
spring:application:name: payment-serviceprofiles:active: devmain:allow-bean-definition-overriding: true #允许覆盖bean定义cloud:nacos:discovery:server-addr: 192.168.146.128:8848config:prefix: payment-service-devserver-addr: 192.168.146.128:8848file-extension: yamlnamespace: f546a969-b313-46a4-b0e1-a1fc9ab716d3group: MY_GROUP注意如果不配置namespace默认为public不配置group默认为DEFAULT_GROUP 此时读取的配置为 namespacedevgroupMY_GROUP 的配置页面显示 config info dev my group
d.service 隔离
同样注册 service 时可以指定 namespace 隔离注册到哪一个命名空间。application.yml 如下:
server:port: ${port:9001}spring:application:name: payment-servicecloud:nacos:discovery:server-addr: 192.168.146.128:8848 # Nacos注册中心地址namespace: f546a969-b313-46a4-b0e1-a1fc9ab716d35.配置拆分
a.配置拆分策略
项目中会有很多的微服务必然会存在很多具体配置和重复配置可以采用如下方案管理配置
根据上面分析在 nacos 中配置 配置在 public 中
b.DataID 配置
payment-service-dev.yaml common.yaml
c.配置文件 bootstrap.yml
spring:application:name: payment-serviceprofiles:active: devmain:allow-bean-definition-overriding: true #允许覆盖bean定义cloud:nacos:discovery:server-addr: 192.168.146.128:8848config:prefix: payment-service-devserver-addr: 192.168.146.128:8848file-extension: yamlnamespace: f546a969-b313-46a4-b0e1-a1fc9ab716d3group: MY_GROUPextension-configs[0]:data-id: common.ymlrefresh: true #自动刷新注extension-configs配置属性和shared-configs配置属性功能一致都是读取配置文件这里我们把重复配置放到 common.yaml 中这样在不同的工程中就可以重复使用[n]的值越大优先级越高。注spring.application.name和spring.profiles.active配置必须放到bootstrap.yml中否则影响配置自动刷新功能。
按照上面方案整合拆分订单微服务的配置文件
order微服务bootstrap.yml
spring:application:name: order-serviceprofiles:active: devcloud:nacos:discovery:server-addr: 192.168.146.128:8848config:prefix: order-service-devserver-addr: 192.168.146.128:8848file-extension: yamlnamespace: f546a969-b313-46a4-b0e1-a1fc9ab716d3group: MY_GROUPextension-configs[0]:data-id: common.ymlrefresh: true #自动刷新注意这里两个工程使用重用的配置文件common.yaml