欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Cloud Alibaba搭建

程序员文章站 2022-05-05 12:17:34
...

Spring Cloud Alibaba 也是微服务开发一站式解决方案,为什么说也是呢?cloud alibaba出来之前,有Spring Cloud生态,其实Cloud Alibaba也是基于Spring Cloud的抽象的分布式系统开发工具包。它包含开发分布式微服务应’用的必须组件。
主要包含 :
Nacos : 服务发现、注册中心与配置中心角色。
Sentinel : 流量控制、熔断降级、系统负载保护
RocketMQ : 消息服务
Dubbo : RPC服务调用
Seata : 分布式事务解决方案

父工程依赖

下面搭建一下父工程依赖

<dependencyManagement>
        <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Hoxton.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

Nacos注册中心

使用最新的Spring Cloud版本,接下另起一个子工程,添加nacos

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

配置文件加上

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

nacos搭建参考NACOS官网
启动子工程就可以看见服务注册上去了。

Nacos配置中心

在子工程引入依赖

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

配置文件中引入

spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        username: nacos
        password: nacos
        namespace: b0c694e8-ba89-405e-b3c8-85f00891e690

在nacos控制台新建一个命名空间,在配置列表切换命名空间,新增一个配置
Spring Cloud Alibaba搭建
DataId命名 : ${prefix}-${spring.profile.active}.${file-extension:properties}

  • prefix : 构成 DataId 的前缀, prefix 需要与项目中 spring.cloud.nacos.config.prefix 配置项的值匹配,如果没有则默认取 spring.application.name 的值
  • spring.profile.active : 构成DataId 的中间部分,需要与项目中**的 profile 想对应(即与 spring.profile.active的值匹配),如果项目中没有配置 spring.profile.avtive,则SpringBoot会加载主配置文件,此时,在DataId中 ${spring.profile.avtive}缺省,且与${prefix} 之间的连接符 - 也不需要
  • file-extension : 构成 DataId的后缀,用来指定配置文件的格式,Nacos默认采用 properties 类型的配置,此时,DataId 中的后缀是可以缺省的,如果想要采用yaml类型的配置,DataId 必须以 .yaml 为后缀,同时需要将项目中 spring.cloud.nacos.config.file-extension配置项的值指定为 yaml

在实际使用中,DataId 常常用来区分开发和测试环境,同时,namespace 也可以做环境配置隔离,也可以解决开发联调过程中一些特殊案例,例如本地联调时候注册中心调度本地应用实例的问题。

在nacos中新增配置后,SpringBoot程序就可以通过 @Value@Configuration 的方式获取到nacos上的配置信息了。

Nacos Config 配置动态刷新

如果现在有个需求,我在Nocos配置端有个开关,某天我想把这个开关打开或是关闭,那应用程序是不是得重启才能刷新到最新的值。
Nacos Config 支持标准 Spring Cloud @RefreshScope特性,即应用订阅某个Nacos配置后,当配置内容变化时,Refresh Scope Beans 中的绑定配置的属性将有条件的更新。所谓的条件是指Bean必须 :

  • 必须条件 : Bean的声明类必须标注 @RefreshScope
  • 二选一条件:
  • 属性(非static字段)标注@Value
  • @ConfiguratuinProperties Bean

在配置Bean中加入 @PostConstruct@PreDestroy 方法,来监控Bean的生命周期与Bean的属性配置刷新的关系,当Nacos Config 接收到服务端配置变更时,对应的@ResfreshScope Bean 生命周期回调方法会被调用,并且是先销毁,然后又重新初始化。因此使用 NacosConfig配置变更时要避免出现重复初始化操作。

后续更新nacos config的源码载读

工程的创建,可以通过 Aliyun Java Initializr快速创建地址