区块链技术博客
www.b2bchain.cn

Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造求职学习资料

本文介绍了Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

前言

在上一篇,13快速失败与熔断器 中,我们采用sentinel配置规则,来进行接口的流量控制,以及防范服务异常宕机时的快速熔断降级。值得一提的是,这其中有一个小问题。

Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

sentinel规则丢失

问题描述:在我们配置好规则后,每次重启微服务,会发现上一次配置好的规则会丢失,如何避免这种情况呢?——持久化

Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

猛男图

No,No,No,意思是将配置找个地同步或存储起来。

解决方案 : 将配置好的限流规则持久化到Nacos中进行同步保存

这样只要请求某个接口地址,sentinel控制台的流控规则就自动获取,只要Nacos里面的配置不删除,针对于微服务接口的流控规则就会持续有效。

一、sentinel配置持久化

这也属于补充一下上一篇文章的技能。在smartcar-member微服务中操作。

实现过程:

1.1.添加maven坐标

引入规则持久化进nacos依赖

<dependency>     <groupId>com.alibaba.csp</groupId>     <artifactId>sentinel-datasource-nacos</artifactId> </dependency>

1.2.修改yml配置内容

在application.yml中增加配置sentinel-nacos的信息

spring:   cloud:     sentinel:       transport:         dashboard: 127.0.0.1:8080         port: 8719 #如被占用会自动+1       eager: true  #取消延迟加载       datasource:         ds1:           nacos:             server-addr: 127.0.0.1:8848             dataId: ${spring.application.name}             groupId: DEFAULT_GROUP             namespace: public             data-type: json             rule-type: flow

nacos中的配置,按照自己本地nacos所写的命名配置一致即可。(为什么要配置port?)

1.3.控制台配置nacos文件

在nacos控制台的配置管理中,增加一个对某接口的流量控制配置。
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

nacos配置表

代码如下:

[     {         "resource":"/member/user/list",         "limitAPP":"default",         "grade":1,         "count":2,         "strategy":0,         "controlBehavior":0,         "clusterMode":false     } ]

参数说明:

  • resource: 资源名称 ,即要限制的接口名称。
  • limitApp: 来源应用
  • grade: 阈值类型, 0表线程数,1表QPS数
  • count: 单机阈值
  • strategy: 流控模式,0表直接,1表关联,2表链路
  • controlBehavior: 流控效果,0表快速失败,1表WarmUp,2表排队等待
  • clusterMode: 是否集群

配置如图:
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

naocs持久化

这样,针对于 @GetMapping(“/member/user/list”) 接口 的sentinel限流规则,就会被加载进nacos配置中保存。

1.4.测试sentinel配置持久化

启动startmcar-member微服务,发起几次接口请求,就可以在Sentinel控制台中看到在nacos中配置的规则信息了。
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

sentinel规则持久化

此时,你可以再次重启member微服务,在发起接口请求。
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

sentinel限流效果

你就会看到我们的已持久化的配置在服务重启之后会依然存在,只要Nacos存在,就会一直生效。
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

限流效果

并且,在nacos中修改限流规则的配置之后, 会自动同步到sentinel的控制台中。这样,就可以再也不用担心sentinel的配置信息丢失了。

二、构建配置中心的起源

在说起为什么需要配置中心时,想先问问读者朋友们,在开发系统的编码岁月里,对于一个需要使用的常量,想要方便的取值和修改,我们是怎么做的呢?

2.1.历届配置方式

第一版:在代码中声明一个 final 常量,需要时,使用或修改这个常量值。

private final String author_nickname = "江湖一点雨";

第二版:在代码中新建一个枚举类(常量类),然后调用这个类的构造方法。

public enum Daima {     AUTHOR_NICKNAME(1,"江湖一点雨");     private int code;     private String name ; }

第三版:在代码中新建一个xml文件,定义一个name属性,获取对于的value值。

<?xml version="1.0" encoding="UTF-8"?> <bean><property name="name" value="江湖一点雨"></property></bean>

第四版:在代码中,将量存放在properties或yml文件中,根据key再取对应的value值。

server.port: 8003

上面都是这么多年来,我们在项目中,对一些特定属性便于存放或修改,而采取的设计方式。那么,在现在,我们先回顾一下,获取配置文件中信息的传统方式。

2.2.传统的配置方式

1.在application.yml文件中,定义一个配置标签:

server:   port: 8003 author:   nickname: "江湖一点雨"

2.在代码中,定义私有变量nickname和port

@Value("${author.nickname}") private String nickname;  @Value("${server.port}") private String port;

我们采用了springboot提供的@value注解,表示从配置中取值,${xxx.key} 是一种 SPEL表达式,根据key取值。

3.定义方法,获取nick和age的值

@GetMapping("/read-local-config") public ResponseResult testLocalConfig() {     HashMap<String, String> map = new HashMap<>();     map.put("appName", nickname);     map.put("port", port);     return ResponseResult.ok(map); }

启动项目,调用请求,得到结果,如下图示:Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

获取配置信息方式一

上述,便是一种从配置文件中获取信息的方式。

那么这种方式有什么缺点呢?——若要修改配置参数,则需要重新启动微服务。

(试想一下,如果微服务很多,则重启所有服务,不方便的同时系统还会不可用,这显然是不可行的)

那有没有什么办法,在修改配置的情况下,让微服务既不停止服务,又能使配置生效呢? ——用Nacos 组件就可以实现。

也正是基于这一痛点,才衍生出了,在微服务项目中,需要构建配置中心的必要性。

三、使用Nacos作为配置中心

在之前的 10集成nacos注册中心 中,我们有提过Nacos组件,分为Nacos Discovery 注册中心,Nacos Config配置中心两个部分。今天,就来介绍一下配置中心的使用。

3.1.引入Nacos-config依赖

在smartcar-member微服务的pom.xml文件中,引入Spring Cloud Alibaba Nacos Config依赖。

<dependency>     <groupId>com.alibaba.cloud</groupId>     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>

注意,是Nacos-Config!

3.2.配置Nacos元数据

在resources路径下新增一个bootstrap.properties 配置文件
(注意:bootstrap.properties 优先级高于其他配置文件,若后缀想改为yml,需在file-extension处配置yaml/yml属性,为演示效果,我们不修改,采用默认方式。)
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

bootstrap.properties位置

配置 Nacos Config 元数据 如下:

spring.application.name=smartcar-member spring.cloud.nacos.config.server-addr=127.0.0.1:8848

3.3.Nacos控制台新增配置

打开nacos的控制台,在配置文件列表中。新增

  • Data ID:smartcar-member
  • Group:DEFAULT_GROUP
  • 配置格式:properties
  • 配置内容:
    properties author.nickname: "江湖一点雨" author.age=20
    图示:
    Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造
    配置图

3.4.开启动态刷新配置功能

在项目的启动类或controller类的头上,添加 @RefreshScope 注解,表示开启动态刷新配置功能。

@RefreshScope @RestController public class MemberUserController {}

为什么加了这么注解就能动态刷新,原理是什么?

前言

在上一篇,13快速失败与熔断器 中,我们采用sentinel配置规则,来进行接口的流量控制,以及防范服务异常宕机时的快速熔断降级。值得一提的是,这其中有一个小问题。

Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

sentinel规则丢失

问题描述:在我们配置好规则后,每次重启微服务,会发现上一次配置好的规则会丢失,如何避免这种情况呢?——持久化

Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

猛男图

No,No,No,意思是将配置找个地同步或存储起来。

解决方案 : 将配置好的限流规则持久化到Nacos中进行同步保存

这样只要请求某个接口地址,sentinel控制台的流控规则就自动获取,只要Nacos里面的配置不删除,针对于微服务接口的流控规则就会持续有效。

一、sentinel配置持久化

这也属于补充一下上一篇文章的技能。在smartcar-member微服务中操作。

实现过程:

1.1.添加maven坐标

引入规则持久化进nacos依赖

<dependency>     <groupId>com.alibaba.csp</groupId>     <artifactId>sentinel-datasource-nacos</artifactId> </dependency>

1.2.修改yml配置内容

在application.yml中增加配置sentinel-nacos的信息

spring:   cloud:     sentinel:       transport:         dashboard: 127.0.0.1:8080         port: 8719 #如被占用会自动+1       eager: true  #取消延迟加载       datasource:         ds1:           nacos:             server-addr: 127.0.0.1:8848             dataId: ${spring.application.name}             groupId: DEFAULT_GROUP             namespace: public             data-type: json             rule-type: flow

nacos中的配置,按照自己本地nacos所写的命名配置一致即可。(为什么要配置port?)

1.3.控制台配置nacos文件

在nacos控制台的配置管理中,增加一个对某接口的流量控制配置。
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

nacos配置表

代码如下:

[     {         "resource":"/member/user/list",         "limitAPP":"default",         "grade":1,         "count":2,         "strategy":0,         "controlBehavior":0,         "clusterMode":false     } ]

参数说明:

  • resource: 资源名称 ,即要限制的接口名称。
  • limitApp: 来源应用
  • grade: 阈值类型, 0表线程数,1表QPS数
  • count: 单机阈值
  • strategy: 流控模式,0表直接,1表关联,2表链路
  • controlBehavior: 流控效果,0表快速失败,1表WarmUp,2表排队等待
  • clusterMode: 是否集群

配置如图:
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

naocs持久化

这样,针对于 @GetMapping(“/member/user/list”) 接口 的sentinel限流规则,就会被加载进nacos配置中保存。

1.4.测试sentinel配置持久化

启动startmcar-member微服务,发起几次接口请求,就可以在Sentinel控制台中看到在nacos中配置的规则信息了。
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

sentinel规则持久化

此时,你可以再次重启member微服务,在发起接口请求。
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

sentinel限流效果

你就会看到我们的已持久化的配置在服务重启之后会依然存在,只要Nacos存在,就会一直生效。
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

限流效果

并且,在nacos中修改限流规则的配置之后, 会自动同步到sentinel的控制台中。这样,就可以再也不用担心sentinel的配置信息丢失了。

二、构建配置中心的起源

在说起为什么需要配置中心时,想先问问读者朋友们,在开发系统的编码岁月里,对于一个需要使用的常量,想要方便的取值和修改,我们是怎么做的呢?

2.1.历届配置方式

第一版:在代码中声明一个 final 常量,需要时,使用或修改这个常量值。

private final String author_nickname = "江湖一点雨";

第二版:在代码中新建一个枚举类(常量类),然后调用这个类的构造方法。

public enum Daima {     AUTHOR_NICKNAME(1,"江湖一点雨");     private int code;     private String name ; }

第三版:在代码中新建一个xml文件,定义一个name属性,获取对于的value值。

<?xml version="1.0" encoding="UTF-8"?> <bean><property name="name" value="江湖一点雨"></property></bean>

第四版:在代码中,将量存放在properties或yml文件中,根据key再取对应的value值。

server.port: 8003

上面都是这么多年来,我们在项目中,对一些特定属性便于存放或修改,而采取的设计方式。那么,在现在,我们先回顾一下,获取配置文件中信息的传统方式。

2.2.传统的配置方式

1.在application.yml文件中,定义一个配置标签:

server:   port: 8003 author:   nickname: "江湖一点雨"

2.在代码中,定义私有变量nickname和port

@Value("${author.nickname}") private String nickname;  @Value("${server.port}") private String port;

我们采用了springboot提供的@value注解,表示从配置中取值,${xxx.key} 是一种 SPEL表达式,根据key取值。

3.定义方法,获取nick和age的值

@GetMapping("/read-local-config") public ResponseResult testLocalConfig() {     HashMap<String, String> map = new HashMap<>();     map.put("appName", nickname);     map.put("port", port);     return ResponseResult.ok(map); }

启动项目,调用请求,得到结果,如下图示:Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

获取配置信息方式一

上述,便是一种从配置文件中获取信息的方式。

那么这种方式有什么缺点呢?——若要修改配置参数,则需要重新启动微服务。

(试想一下,如果微服务很多,则重启所有服务,不方便的同时系统还会不可用,这显然是不可行的)

那有没有什么办法,在修改配置的情况下,让微服务既不停止服务,又能使配置生效呢? ——用Nacos 组件就可以实现。

也正是基于这一痛点,才衍生出了,在微服务项目中,需要构建配置中心的必要性。

三、使用Nacos作为配置中心

在之前的 10集成nacos注册中心 中,我们有提过Nacos组件,分为Nacos Discovery 注册中心,Nacos Config配置中心两个部分。今天,就来介绍一下配置中心的使用。

3.1.引入Nacos-config依赖

在smartcar-member微服务的pom.xml文件中,引入Spring Cloud Alibaba Nacos Config依赖。

<dependency>     <groupId>com.alibaba.cloud</groupId>     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>

注意,是Nacos-Config!

3.2.配置Nacos元数据

在resources路径下新增一个bootstrap.properties 配置文件
(注意:bootstrap.properties 优先级高于其他配置文件,若后缀想改为yml,需在file-extension处配置yaml/yml属性,为演示效果,我们不修改,采用默认方式。)
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

bootstrap.properties位置

配置 Nacos Config 元数据 如下:

spring.application.name=smartcar-member spring.cloud.nacos.config.server-addr=127.0.0.1:8848

3.3.Nacos控制台新增配置

打开nacos的控制台,在配置文件列表中。新增

  • Data ID:smartcar-member
  • Group:DEFAULT_GROUP
  • 配置格式:properties
  • 配置内容:
    properties author.nickname: "江湖一点雨" author.age=20
    图示:
    Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造
    配置图

3.4.开启动态刷新配置功能

在项目的启动类或controller类的头上,添加 @RefreshScope 注解,表示开启动态刷新配置功能。

@RefreshScope @RestController public class MemberUserController {}

为什么加了这么注解就能动态刷新,原理是什么?

前言

在上一篇,13快速失败与熔断器 中,我们采用sentinel配置规则,来进行接口的流量控制,以及防范服务异常宕机时的快速熔断降级。值得一提的是,这其中有一个小问题。

Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

sentinel规则丢失

问题描述:在我们配置好规则后,每次重启微服务,会发现上一次配置好的规则会丢失,如何避免这种情况呢?——持久化

Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

猛男图

No,No,No,意思是将配置找个地同步或存储起来。

解决方案 : 将配置好的限流规则持久化到Nacos中进行同步保存

这样只要请求某个接口地址,sentinel控制台的流控规则就自动获取,只要Nacos里面的配置不删除,针对于微服务接口的流控规则就会持续有效。

一、sentinel配置持久化

这也属于补充一下上一篇文章的技能。在smartcar-member微服务中操作。

实现过程:

1.1.添加maven坐标

引入规则持久化进nacos依赖

<dependency>     <groupId>com.alibaba.csp</groupId>     <artifactId>sentinel-datasource-nacos</artifactId> </dependency>

1.2.修改yml配置内容

在application.yml中增加配置sentinel-nacos的信息

spring:   cloud:     sentinel:       transport:         dashboard: 127.0.0.1:8080         port: 8719 #如被占用会自动+1       eager: true  #取消延迟加载       datasource:         ds1:           nacos:             server-addr: 127.0.0.1:8848             dataId: ${spring.application.name}             groupId: DEFAULT_GROUP             namespace: public             data-type: json             rule-type: flow

nacos中的配置,按照自己本地nacos所写的命名配置一致即可。(为什么要配置port?)

1.3.控制台配置nacos文件

在nacos控制台的配置管理中,增加一个对某接口的流量控制配置。
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

nacos配置表

代码如下:

[     {         "resource":"/member/user/list",         "limitAPP":"default",         "grade":1,         "count":2,         "strategy":0,         "controlBehavior":0,         "clusterMode":false     } ]

参数说明:

  • resource: 资源名称 ,即要限制的接口名称。
  • limitApp: 来源应用
  • grade: 阈值类型, 0表线程数,1表QPS数
  • count: 单机阈值
  • strategy: 流控模式,0表直接,1表关联,2表链路
  • controlBehavior: 流控效果,0表快速失败,1表WarmUp,2表排队等待
  • clusterMode: 是否集群

配置如图:
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

naocs持久化

这样,针对于 @GetMapping(“/member/user/list”) 接口 的sentinel限流规则,就会被加载进nacos配置中保存。

1.4.测试sentinel配置持久化

启动startmcar-member微服务,发起几次接口请求,就可以在Sentinel控制台中看到在nacos中配置的规则信息了。
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

sentinel规则持久化

此时,你可以再次重启member微服务,在发起接口请求。
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

sentinel限流效果

你就会看到我们的已持久化的配置在服务重启之后会依然存在,只要Nacos存在,就会一直生效。
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

限流效果

并且,在nacos中修改限流规则的配置之后, 会自动同步到sentinel的控制台中。这样,就可以再也不用担心sentinel的配置信息丢失了。

二、构建配置中心的起源

在说起为什么需要配置中心时,想先问问读者朋友们,在开发系统的编码岁月里,对于一个需要使用的常量,想要方便的取值和修改,我们是怎么做的呢?

2.1.历届配置方式

第一版:在代码中声明一个 final 常量,需要时,使用或修改这个常量值。

private final String author_nickname = "江湖一点雨";

第二版:在代码中新建一个枚举类(常量类),然后调用这个类的构造方法。

public enum Daima {     AUTHOR_NICKNAME(1,"江湖一点雨");     private int code;     private String name ; }

第三版:在代码中新建一个xml文件,定义一个name属性,获取对于的value值。

<?xml version="1.0" encoding="UTF-8"?> <bean><property name="name" value="江湖一点雨"></property></bean>

第四版:在代码中,将量存放在properties或yml文件中,根据key再取对应的value值。

server.port: 8003

上面都是这么多年来,我们在项目中,对一些特定属性便于存放或修改,而采取的设计方式。那么,在现在,我们先回顾一下,获取配置文件中信息的传统方式。

2.2.传统的配置方式

1.在application.yml文件中,定义一个配置标签:

server:   port: 8003 author:   nickname: "江湖一点雨"

2.在代码中,定义私有变量nickname和port

@Value("${author.nickname}") private String nickname;  @Value("${server.port}") private String port;

我们采用了springboot提供的@value注解,表示从配置中取值,${xxx.key} 是一种 SPEL表达式,根据key取值。

3.定义方法,获取nick和age的值

@GetMapping("/read-local-config") public ResponseResult testLocalConfig() {     HashMap<String, String> map = new HashMap<>();     map.put("appName", nickname);     map.put("port", port);     return ResponseResult.ok(map); }

启动项目,调用请求,得到结果,如下图示:Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

获取配置信息方式一

上述,便是一种从配置文件中获取信息的方式。

那么这种方式有什么缺点呢?——若要修改配置参数,则需要重新启动微服务。

(试想一下,如果微服务很多,则重启所有服务,不方便的同时系统还会不可用,这显然是不可行的)

那有没有什么办法,在修改配置的情况下,让微服务既不停止服务,又能使配置生效呢? ——用Nacos 组件就可以实现。

也正是基于这一痛点,才衍生出了,在微服务项目中,需要构建配置中心的必要性。

三、使用Nacos作为配置中心

在之前的 10集成nacos注册中心 中,我们有提过Nacos组件,分为Nacos Discovery 注册中心,Nacos Config配置中心两个部分。今天,就来介绍一下配置中心的使用。

3.1.引入Nacos-config依赖

在smartcar-member微服务的pom.xml文件中,引入Spring Cloud Alibaba Nacos Config依赖。

<dependency>     <groupId>com.alibaba.cloud</groupId>     <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>

注意,是Nacos-Config!

3.2.配置Nacos元数据

在resources路径下新增一个bootstrap.properties 配置文件
(注意:bootstrap.properties 优先级高于其他配置文件,若后缀想改为yml,需在file-extension处配置yaml/yml属性,为演示效果,我们不修改,采用默认方式。)
Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造

bootstrap.properties位置

配置 Nacos Config 元数据 如下:

spring.application.name=smartcar-member spring.cloud.nacos.config.server-addr=127.0.0.1:8848

3.3.Nacos控制台新增配置

打开nacos的控制台,在配置文件列表中。新增

  • Data ID:smartcar-member
  • Group:DEFAULT_GROUP
  • 配置格式:properties
  • 配置内容:
    properties author.nickname: "江湖一点雨" author.age=20
    图示:
    Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造
    配置图

3.4.开启动态刷新配置功能

在项目的启动类或controller类的头上,添加 @RefreshScope 注解,表示开启动态刷新配置功能。

@RefreshScope @RestController public class MemberUserController {}

为什么加了这么注解就能动态刷新,原理是什么?

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Spring Cloud Alibaba微服务架构实战教程—14持久化和配置中心的打造求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们