Spring Cloud Alibaba简介
Spring Cloud Alibaba旨在为微服务开发提供一站式解决方案。该项目包括用于开发分布式应用程序和服务的必需组件,以便开发人员可以使用Spring Cloud编程模型轻松地开发分布式应用程序。
使用Spring Cloud Alibaba,您只需要添加一些注释和配置,就可以为您的应用程序使用Alibaba的分布式解决方案,并使用Alibaba中间件构建自己的分布式系统。
Spring Cloud Alibaba作用
流控制和服务降级:支持WebServlet,WebFlux,OpenFeign,RestTemplate,Dubbo访问限制和降级流的功能。它可以在运行时通过控制台实时修改限制和降级流的规则,并且还支持监视限制和降级度量标准。
服务注册和发现:可以注册服务,并且客户可以使用Spring托管的bean(自动集成功能区)发现实例。
分布式配置:支持分布式系统中的外部配置,配置更改时自动刷新。
Rpc服务:扩展Spring Cloud客户端RestTemplate和OpenFeign以支持调用Dubbo RPC服务。
事件驱动:支持构建与共享消息系统连接的高度可扩展的事件驱动微服务。
分布式事务:支持高性能且易于使用的分布式事务解决方案。
阿里云对象存储:大规模,安全,低成本,高度可靠的云存储服务。支持随时随地在任何应用程序中存储和访问任何类型的数据。
阿里云SchedulerX:准确,高度可靠,高可用性的计划作业调度服务,响应时间在几秒钟之内。
阿里云SMS:覆盖全球的消息服务,阿里巴巴SMS提供便捷,高效和智能的通信功能,可帮助企业快速联系其客户。
其中阿里云对象存储、阿里云SchedulerX、阿里云SMS为商业组件,需要购买相关云服务才能使用。
Spring Cloud Alibaba Nacos
简介
Nacos是一个易于使用的动态服务发现、配置和服务管理平台。相较于传统的服务发现与注册组件,Nacos有着良好的交互页面和动态特性。其作用等价于服务注册发现(Eureka)+服务配置管理(Config)+服务控制总线(Bus)。
环境准备
Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境。
系统环境
CentOS Linux release 7.9.2009
Nacos安装
下载Nacos
方式一、源码下载
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
ls -al distribution/target/
// change the $version to your actual path
cd {your actual path}/nacos/bin
方式二、发布包下载
点击此处下载最新的发布包
unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
Nacos持久化修改(依需修改)
默认情况下Nacos会将配置信息存储在内嵌存储器中,但通常我们希望在数据库中存储或管理这些配置信息,那么就需要进行持久化修改,目前Nacos仅支持MYSQL5.6以上数据库。
初始化数据库表
在/userpath/nacos/conf
下找到文件nacos-mysql.sql,在数据库执行该文件内容,完成库表初始化工作。
修改Nacos配置
在/userpath/nacos/conf
下找到文件application.properties,定位到 Config Module Related Configurations
将原本注释的部分放开并修改为自己的数据库连接信息。
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
Nacos启动
定位到/userpath/nacos/bion
执行命令
sh startup.sh -m standalone #表示以单机模式启动
访问http://ip:8848/nacos
出现以下页面,代表启动成功,初始密码为nacos/nacos
设置Nacos开机启动
创建开机启动文件
cd /lib/systemd/system/
touch nacos.service
vi nacos.service
文件内容如下,其中/usr/local/nacos/bin/
需要修改为本机nacos所在目录
[Unit]
Description=nacos
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nacos/bin/startup.sh -m standalone
ExecReload=/usr/local/nacos/bin/shutdown.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target
生效配置文件并设置开机启动
systemctl daemon-reload #先进行文件生效配置
systemctl enable nacos.service #设置为开机启动
查看是否已开机启动
systemctl is-enabled nacos.service
Nacos Spring Cloud
使用 Nacos 来实现分布式环境下的配置管理和服务注册发现
- 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更
- 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现
Nacos服务发现
项目集成
引入依赖,引入时需要注意引入版本与spring boot版本的关系
- 版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本
- 版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本
- 版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${latest.version}</version>
</dependency>
修改配置文件application.yml,增加如下内容
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #Nacos作为服务注册中心地址
group: DEV_GROUP #应用分组
通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能
@SpringBootApplication
@EnableDiscoveryClient
public class NacosBaseApplication {
public static void main(String[] args) {
SpringApplication.run(NacosBaseApplication.class, args);
}
}
Nacos服务发现验证
nacos-base新建服务提供类nacosProviderController
@RestController
public class nacosProviderController {
@GetMapping("/provider/{name}")
public String sayHelloToUser(@PathVariable String name) {
return "Hello " + name + " !";
}
}
启动nacos-base,查看nacos服务列表
浏览器内访问:http://127.0.0.1:9001/provider/jack
,表明服务已被成功发现,验证完毕
Nacos配置管理
项目集成
引入依赖,引入时需要注意引入版本与spring boot版本的关系
- 版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本
- 版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本
- 版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本
更多版本对应关系:点击此处查看
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${latest.version}</version>
</dependency>
确认当前启动环境
spring:
profiles:
active: dev
在bootstrap.yml中新增如下配置
spring:
application:
name: nacos-base
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 #Nacos作为配置中心地址
file-extension: yaml # 指定配置文件的格式为yaml
group: DEV_GROUP #指定配置文件分组GROUP
此处有2个注意点:第一、配置config信息的文件必须是bootstrap,bootstrap在启动时读取顺序优先于application,因为我们是进行配置管理,所以需要优先读取nacos的配置信息,故因将nacos配置放于bootstrap中;第二、spring.application.name是必须的,这与nacos的dataid构造相关,这在下文中会展开说明。
Nacos控制台集成
点击“+”新增配置
进入配置新增页面
在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
- prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置
- spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 {file-extension}
- file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型
根据我们上面的配置可知Data Id为:nacos-base-dev.yaml
,需要注意的是相同group下,Data Id不能重复
配置完成后点击“发布”即可,最终效果
Nacos动态配置验证
新建测试类ConfigClientController
@RestController
@RefreshScope // 通过Spring Cloud原生注解@RefreshScope实现配置自动更新
public class ConfigClientController
{
@Value("${config.info}") // 注入配置中心中的config.info配置信息
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
启动项目,在浏览器中访问地址:http://127.0.0.1:9001/config/info
修改nacos 配置中的信息
点击发布并刷新浏览器,发现配置信息变更,验证完毕