Spring Cloud Alibaba搭建
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控制台新建一个命名空间,在配置列表切换命名空间,新增一个配置
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快速创建地址
推荐阅读
-
详解spring cloud使用Hystrix实现单个方法的fallback
-
详解Spring Cloud Feign 熔断配置的一些小坑
-
Spring Cloud Netflix架构浅析(小结)
-
spring cloud实现Eureka注册中心的HA的方法
-
spring cloud feign不支持@RequestBody+ RequestMethod.GET报错的解决方法
-
详解spring cloud Feign使用中遇到的问题总结
-
使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务的方法(推荐)
-
Spring Cloud Gateway 之请求坑位[微服务IP不同请求会失败]
-
跟我学SpringCloud | 第六篇:Spring Cloud Config Github配置中心
-
JSP spring boot / cloud 使用filter防止XSS