Spring Cloud Alibaba【为什么需要分布式配置中心、了解主流的配置中心、DataID配置、Group分组方案、Namespace实施方案】(四)

 

目录

服务调用_Dubbo实现服务降级

分布式配置中心_为什么需要分布式配置中心

分布式配置中心_了解主流的配置中心

应用和配置中心间的数据同步通常如下三种模式: 

分布式配置中心_Namespace命名空间

分布式配置中心_DataID配置

分布式配置中心_Group分组方案

分布式配置中心_Namespace实施方案

分布式配置中心_将应用对接Nacos配置中心


服务调用_Dubbo实现服务降级

设置服务生产者集群容错模式

@DubboService(timeout = 5000,
        version = "1.0",
        methods = {@Method(name = "index",retries = 2)},
        // 快速失败模式,调用只执行一次,失败则立即报错。
        cluster = "failfast")
public class PaymentServiceImpl implements IPaymentService {
    @Override
    public String index() {
        return "hello dubbo payment";
   }
}

 

 编写降级实现类

public class PaymentFallback implements IPaymentService {
    //降级方法
    @Override
    public String index() {
        return "服务繁忙请稍后再试!";
   }
}

编写订单业务层

@Service
public class PaymentServiceImpl {
    @DubboReference(version = "1.0",
                    mock = "com.tong.service.PaymentFallback",
                    // 快速失败,去查询集群中其他机器
                    cluster = "failfast")
   
    IPaymentService iPaymentService;
    public String index() {
        return iPaymentService.index();
   }
}

注意: 该处mock直接配置服务降级类的全路径。

测试

故意关闭订单支付生产者服务。请求http://localhost:80/order/index

 

实时效果反馈

1.Dubbo技术中如何实现服务降级_____。

A Hystrix

B Resilience4j

C mock

D 以上都是错误 

分布式配置中心_为什么需要分布式配置中心

为什么需要分布式配置中心 

作为一个开发人员,对配置文件都不陌生。在Spring项目中,默认 提供了一个application.yml或者application.properties。

 

 

注意: 把各个服务的某些配置信息统一交给第三方中间件来维护,分布式配置管理上的数据变变更,需要实时地推送到相对应的应用服务节点上。 

 

实时效果反馈

1.不使用分布式配置中心有那些缺点是_____。

A 不支持配置文件的动态更新 

B 不支持配置集中式管理

C 不支持多环境部署

D 以上都是正确

分布式配置中心_了解主流的配置中心

主流的分布式配置中心有以下三种,其中,Nacos是Alibaba开源的分布式配置中心。 

Nacos

这是SpingCloud alibaba技术栈中的一个组件,前面我们已经使用它做过服务注册中心。其实它也集成了服务配置的功能,我们可以直接使用它作为服务配置中心。

 

应用和配置中心间的数据同步通常如下三种模式: 

Pull模式:让应用开后长轮询,即定时地从配置中心拉取最新的配置信息,并更新到应用的内存 中。

Push模式:在配置中心配置数据变更之后,主动推送配置数据到指定的应用,应用更新到本地内 存中。

混合模式:应用和配置中心通过“事件机制+监听器”模式保持长连接。如果应用监听的配置信息发 生了变化,则配置中心发布对应类型的事件。应用只有在监听到该事件之后,才会处理对应的配置信 息,并更新到应用本地。 

Apollo

Apollo是由携程开源的分布式配置中心。特点有很多,比如:配置更新之后可以实时生效,支持灰度发布功能,并且能对所有的配置 进行版本管理、操作审计等功能,提供开放平台API。携程的分布式 配置中心框架,有图形界面可以管理配置文件信息,配置文件信息存放 在数据库中。

Spring Cloud Config

它和Spring是无缝集成,使用起来非常方便,并且它的配置存储支 持Git。不过它没有可视化的操作界面,配置的生效也不是实时的, 需要重启或去刷新。

分布式配置中心对比

实时效果反馈

1.下列不属于分布式配置中心技术的是_____。 

A Nacos

B Apollo

C SpringCloud Config

D Gateway

2.下列Nacos技术中应用和配置中心间的数据同步常用的三种模式是_____。

A Pull模式

B Push模式

C 混合模式

D 以上都是正确

分布式配置中心_Namespace命名空间

前言 

现如今,在微服务体系中,一个系统往往被拆分为多个服务,每个服务都有自己的配置文件,然后每个系统往往还会准备开发环境、 测试环境、正式环境。

问题: 我们来说算一算,假设某系统有10个微服务,那么至少有10个 配置文件吧,三个环境(dev\test\prod),那就有30个配置文 件需要进行管理。 

概念 

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同 环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如 配置、服务)隔离等。默认namespace=public的保留空间,不支持删除;默认情况下。

 

场景 

Nacos给的最佳实践表明,最外层的namespace是可以用于区分部署环境的,比如test,dev,prod等。

注意: 命名空间可用于进行不同环境的配置隔离。一般一个环境划分到一个命名空间。 

新建dev/test的Namespac 

查看命名空间 

实时效果反馈

1.Nacos组件Namespace命名空间主要作用_____。

A 多环境下的配置隔离和管理

B 组织划分配置

C 组织配置

D 以上都是错误 

2. Nacos组件中Namespace是可以用于区分____。

A 项目配置

B 配置文件

C 部署环境

D 以上都是错误

分布式配置中心_DataID配置

 概念

Nacos 中的某个配置集的 ID,配置集 ID 是组织划分配置的维度之 一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用 可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。

注意: 在系统中,一个配置文件通常就是一个配置集。一般微服务的配置就是一个配置集。

dataId的拼接格式 

解释:

1、prefix:默认为 spring.application.name 的值。

2、spring.profiles.active:即为当前环境对应的 profile。

3、file-extension:文件后缀 

当activeprofile为空时。

新建dev配置DataID 

编写配置 

实时效果反馈 

1.Nacos组件dataId中prefix所表示的含义__。

A 应用名字

B 环境

C 后缀名

D 以上都是错误

2. Nacos组件dataId中file-extension所表示的含义__。

A 应用名字

B 环境

C 后缀名

D 以上都是错误

分布式配置中心_Group分组方案

概念 

Nacos中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串对配置集进行分组,从而区分Data ID相同的配置集。当您在 Nacos上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用DEFAULT_GROUP 。

通过Group实现环境区分 

在Nacos图形界面控制台上传新建配置文件DataID 

实时效果反馈

1.Nacos组件中Group默认分组名字是_____。

A DEFAULT

B GROUP

C DEFAULT_GROUP

D 以上都是错误 

分布式配置中心_Namespace实施方案

Nacos给出了两种Namespace的实践方案

1、面向一个租户

2、面向多个租户

面向一个租户

从一个租户(用户)的角度来看,如果有多套不同的环境,那么这个时候可以根据指定的环境来创建不同的 namespce,以此来实现多环境的隔离。

例如,你可能有dev,test和prod三个不同的环境,那么使用一套 nacos 集群可以分别建以下三个不同的namespace。

 

问题: 这里的单租户同样也适于小型项目,或者是项目不太多时的实施方案,通过定义不同的环境,不同环境的项目在不同的 Namespace下进行管理,不同环境之间通过Namespace进行隔离。 

 面向多个租户

当多个项目同时使用该Nacos集群时,还可以通过Group进行 Namespace内的细化分组。这里以 Namespace:dev 为例,在 Namespace中通过不同Group进行同一环境中不同项目的再分类 。

注意: 通过上面的理论分析,可以看出方案二有很好的扩展性 

实时效果反馈

1.Nacos技术中Namespace命名空间面向一个租户适用_____。

A 小型项目 

B 中型项目

C 大型项目

D 以上都是错误

2.Nacos技术中Namespace命最佳实施方案_____有很好的扩展性。

A 面向单个租户

B 面向一个租户

C 面向多个租户

D 以上都是错误

分布式配置中心_将应用对接Nacos配置中心

新建配置 

创建工程cloud-nacos-config3344 

POM引入依赖 

  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
           <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
    </dependencies>

编写主启动类

/**
* 主启动类
*/
@SpringBootApplication
@Slf4j
@EnableDiscoveryClient
public class NacosConfigMain3344 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigMain3344.class,args);
        log.info("***********NacosConfigMain3344 **********");
   }
}

创建配置文件

创建配置文件名为 bootstrap.yml ,注意是bootstrap.yml,而不是 application 。

原因: Nacos同SpringCloud-Config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。SpringBoot中配置文件的加载是存在优先级顺序的, bootstrap优先级高于application。 

server:
 port: 3344
spring:
 application:
   name: nacos-config
 cloud:
   nacos:
     discovery:
       server-addr: 192.168.66.101:8848
     config:
        #服务器地址
       server-addr: 192.168.66.101:8848
        #默认为Public命名空间,可以省略不写 #对应建立的命名空间的UUID
       namespace: a26e7bb2-04df-4574-8313-3d8728ae88ba
        #指定文件后缀
       file-extension: yaml
        #文件名 -- 如果没有配置则默认为 ${spring.appliction.name}
       prefix: ${spring.application.name}
        #指定配置群组 --如果是Public命名空间 则可以省略群组配置
       group: DEFAULT_GROUP
 profiles:
   active: dev

 

上面的配置是为了保证服务的正常注册和配置获取,以及配置 DataID 的正确性 

创建对外接口来从nacos中读取配置 

@RestController
public class NacosConfigController {
    @Value("${nacos.config}")
    private String config;
    @RequestMapping("/getValue")
    public String getValue() {
        return config;
   }

出现问题

出现报错,肯定配置写错了,检查5步曲

具体细节看下图 

测试 请求http://localhost:3344/getValue 

 

猜你喜欢

转载自blog.csdn.net/m0_58719994/article/details/131817448