当前位置:首页 > 科普资料 > 正文

alibaba_cloud(alibabacloudlinux)

alibaba_cloud(alibabacloudlinux)

11:服务配置中心:Nacos Config

11.1,服务配置中心

首先我们来看看微服务架构下配置文件的一些问题:

配置文件的相对哈希。在微服务架构下,配置文件会随着微服务的增加越来越多,会分散在各个微服务中,统一配置和管理。配置文件无法区分环境。微服务项目可能有多个环境,如测试环境、预发布环境和生产环境。每个环境使用不同的配置。一旦需要修改,我们需要手动维护每个微服务,难度很大。配置文件不能实时更新。我们修改配置文件后,必须重启微服务才能使配置生效,这对于正在运行的项目来说是非常陌生的。基于这些问题,除了解决这些问题,我们还需要配置中心。配置的思想是:

首先,在一个集中的位置管理项目中的所有配置,并提供一组标准接口。当需要配置每项服务时,配置*接口以获取配置。在配置中心更新各种参数时,也会通知各服务同步的最新信息,以便动态更新。添加服务配置中心后,我们的系统架构图如下所示:

业内有几种类型的服务配置中心:

Apollo阿波罗是携程开源的分布式配置中心。功能很多,比如:配置更新后可以实时生效,支持灰度发布功能,可以使用所有配置进行管理、操作和审计等。并提供开放平台API。信息也写得很详细。Disconf Disconf是Pali的一个开源分发中心。它基于ZooKeeper实现了实时通知,并在配置改变后生效。这是Spring cloud中的配置中心组件。它与Spring无缝集成,使用起来非常方便,其配置存储支持Git。但是它没有可视化的操作界面,配置的有效性不是实时的,需要重启或者刷新。这是SpingCloud阿里巴巴技术栈中的一个组件。我们用它在前面有一个服务注册中心。其实它还集成了服务配置的功能,我们可以直接把它作为服务配置中心。

11.2,Nacos Config入门

使用Nacos作为配置中心。实际上,它以NacoS为服务器,以每个微控制器为客户端。我们会在Nacos上统一每个微服务的配置文件,然后每个微服务会从Nacos上拉配置。

1介绍产品的微服务

com . Alibaba . cloud . groupid spring-cloud-start-Alibaba-Nacos-Config神器id依赖复制代码在微服务中添加Nacos Config配置。

您不能使用原始应用程序。YML作为配置文件,但是创建一个新的BootStrap.yml作为配置文件。

配置文件优先级(从高到低):bootstrap . properties-bootstrap . yml-application . properties-application . yml

我注意到原始的YML配置文件保留了下来,只留下了惟一的配置,比如端口和服务名。

spring:application:name:product Service cloud:Nacass:configuration:server-addr:127 . 0 . 0 . 1:8848 # Nacos中心地址文件扩展名:yaml# # Profile格式介绍:activity: dev# #环境ID复制代码在Nacos中添加配置,然后将order Micro Service application . yml配置复制到配置内容中。

它是本地应用程序中的内容,启动程序经过测试。

11.3,Nacos Config配置动态刷新

我们已经实现了远程存储,但是如果修改配置,我们的程序就无法读取,所以需要开启配置的动态刷新功能。

Nacos中Order-service-dev.yaml配置键中的此配置(它必须位于远程配置文件中,而不是本地)

配置:AppName:Order# #不代表只要测试动态刷新,当你更改参数时,请参考是否可以动态刷新复制代码,在订单微服务中添加NacosconFigControlller。

@ restcontroller。@ refresh scope//动态刷新公共类nacosconfigcontroller { @ value(" $ { appconfig . name })私有字符串AppConfigname的说明;@ requestmapping ("/nacosconfig1 ")公共字符串nacosconfig(){ returns " remote information:app configname;}}复杂

制代码

11.4,NACOS配置配置共享

当配置越来越多时,我们发现有许多配置要重复。此时,我们需要考虑提取公共1个配置文件,然后实现需要直接导入的配置文件共享。

11.4.1,在相同微型服务的不同环境之间共享配置

如果要在同一微服务的不同环境之间配置共享,则只需提取由Spring.Application.name(Spring.Service Name)命名的配置文件,然后将公共配置放入其所有环境中。

创建新订单服务.YAML配置文件

此配置文件用于存储公共配置文件。

服务器:  港口:8080  Tomcat:    线程:      最多:10#Tomcat的最大并发值修改为10,春天:  紫皮金:    Base-URL:http://127.0.0.1:9411/ #zzipkin服务器请求地址    DiscoveryClientEnabled:False#让Nacos作为URL,不是服务名称    雪松:      取样器:        概率:1.0#百分比  应用:    名称:订单服务  数据源:    驱动程序类 - 名称:com.mysql.jdbc.driver    URL:JDBC:MySQL:///商店 - 产品? ServerTimeZone = UTC&UnderUnicode = True&CharmentEncoding = UTF-8和USESSL = TRUE    用户名:root.    密码:1101121833  云:    纳卡斯:      发现:        Server-addr:localhost:8848    哨兵:      运输:        端口:9999#与控制台的端口,您将自由指定未使用的端口。        仪表板:localhost:8080#指定控制台服务的地址      网络上下文统一:FALSE  JPA:    特性:      休眠:        HBM2DDL:          自动更新        DIALECT:org.hibernate.dialect.mysql5innodbdalect.产品 - 服务:#提供的提供商的名称  丝带:    nfloadbalancerreClassName:com.netflix.loadbalancer.randomrule.假装:  客户:    配置:      默认:        ConnectTimeout:3000.        读取时间:3000.复制代码

为订单服务-Test.yaml创建配置文件

此配置文件用于存储测试环境的配置。

AppConfig:  名称:订单服务env:dev.服务器:    应用:        名称:订单服务春天:  应用:    名称:订单服务#名称  云:    纳卡斯:      配置:        server-addr:127.0.0.1:8848 #Nacos中心地址        文件扩展名:yaml#配置文件格式复制代码

控制器中的新测试方法

@RestController.@refreshscope.公共类NacosconFigController {    @Value(“$ {appconfig.name})    私有字符串AppConfigname;    @Value(“$ {env}”)    私有字符串env;    @requestmapping(“/ nacosconfig1”)    public string nacosconfig(){        返回“远程信息:+ AppConfigname;    }    @requestmapping(“/ nacosconfig2”)    public string nacosconfig2(){        返回“公共配置:”+ appconfigname +“,环境配置信息:”+ env;    }}复制代码

11.4.2,在不同的微服务中的中间共享配置

在服务之间实现配置的原则类似于文件简介,即定义公共配置,然后在当前配置中引入。

在Nacos中定义Global-config.yaml配置文件

此配置文件用于存储所有微型服务共享配置。为方便起见,写一个属性。

GlobalConfig:Global.复制代码

修改bootstrap.yaml.

春天:  应用:    名称:订单服务#名称  云:    纳卡斯:      配置:        server-addr:127.0.0.1:8848 #Nacos中心地址        文件扩展名:yaml#配置文件格式        共享 - 配置:          -  data-id:global-config.yaml#配置要介绍的配置            刷新:真实  简介:    活动:测试#环境ID复制代码

修改1Controller的侧面方法

@RestController.@refreshscope.公共类NacosconFigController {    @Value(“$ {appconfig.name})    私有字符串AppConfigname;    @Value(“$ {env}”)    私有字符串env;    @Value(“$ {globalconfig})    私有字符串GlobalConfig;    @requestmapping(“/ nacosconfig1”)    public string nacosconfig(){        返回“远程信息:+ AppConfigname;    }    @requestmapping(“/ nacosconfig2”)    public string nacosconfig2(){        返回“公共配置:”+ appconfigname +“,环境配置信息:”+ env;    }    @requestmapping(“/ nacosconfig3))    public string nacosconfig3(){        返回“全局配置:”+ GlobalConfig +“,公共配置:”+ appconfigname +“,环境配置信息:”+ ENV;    }}复制代码

测试

11.5,纳卡斯的几种概念

命名空间命名空间可用于隔离不同的环境。通常,环境被分成名称空间。配置包配置包用于对同一数据包对不同的服务进行分类。项目的配置通常将其分发给组。配置集(数据ID)位于系统中,配置文件通常是配置集。通常,微服务的配置是配置集。