Spring Cloud(Alibaba)女朋友看了都会的超详细保姆级笔记!看完还不会算我输!
Posted 是阿岚呐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud(Alibaba)女朋友看了都会的超详细保姆级笔记!看完还不会算我输!相关的知识,希望对你有一定的参考价值。
1. 简介
为什么会出现?
SpringCloud Netflix进入维护模式,意味着不再向模块添加新的功能和组件
能干嘛?
服务降级限流、服务注册与发现、分布式配置管理、消息驱动能力、阿里云对象存储、分布式任务调度
2. Nacos服务注册配置中心
2.1 安装
介绍
Nacos是注册中心+配置中心的组合,即Nacos = Eurake + Config + Bus
下载
https://github.com/alibaba/nacos/releases/download/1.1.4/nacos-server-1.1.4.zip
解压,进入bin目录,双击sartup.cmd启动!访问 http://localhost:8848/nacos:
2.2 Nacos服务注册中心
2.2.1 服务提供者注册
-
新建module:cloudalibaba-provider-payment9001
-
POM
-
父POM
-
子POM
<dependencies> <!--SpringCloud ailibaba nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <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>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
-
-
YML
server: port: 9001 spring: application: name: nacos-payment-provider cloud: nacos: discovery: server-addr: localhost:8848 #配置Nacos地址 management: endpoints: web: exposure: include: '*'
-
主启动
@SpringBootApplication @EnableDiscoveryClient public class PaymentMain9001 { public static void main(String[] args) { SpringApplication.run(PaymentMain9001.class,args); } }
-
业务类
@RestController public class PaymentController { @Value("${server.port}") private String serverPort; @GetMapping(value = "/payment/nacos/{id}") public String getPayment(@PathVariable("id") Integer id){ return "nacos registry, serverPort: "+serverPort+"\\t id: " + id; } }
-
新建9002:效果如下:
2.2.2 消费者注册和负载
-
新建Module:cloudalibaba-consumer-nacos-order83
-
POM
<dependencies> <!--SpringCloud ailibaba nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <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>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
-
YML
server: port: 83 spring: application: name: nacos-order-consumer cloud: nacos: discovery: server-addr: localhost:8848 #消费者将要去访问的微服务名称(注册成功进nacos,的微服务提供者) service-url: nacos-user-service: http://nacos-payment-provider
-
主启动类
@EnableDiscoveryClient @SpringBootApplication public class PaymentMain9002 { public static void main(String[] args) { SpringApplication.run(PaymentMain9002.class,args); } }
-
业务类
@Configuration public class ApplicationContextConfig { @Bean @LoadBalanced public RestTemplate getRestTemplete(){ return new RestTemplate(); } }
@RestController@Slf4jpublic class OrderNacosController { @Resource private RestTemplate restTemplate; @Value("${service-url.nacos-user-service}") private String serverURL; @GetMapping(value = "/consumer/payment/nacos/{id}") public String paymentInfo(@PathVariable("id") Long id){ return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class); }}
-
测试
http://localhost:83/consumer/payment/nacos/13 实现了负载均衡
2.2.3 服务注册中心对比
Nacos支持AP和CP的切换:
2.3 Nacos配置中心
2.3.1 基础配置
-
新建module:cloudalibaba-config-nacos-client3377
-
POM
<dependencies> <!--nacos-config--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!--SpringCloud ailibaba nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <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>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
-
YML
Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application。-
bootstrap
#naco配置 server: port: 3377 spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 #Nacos服务注册中心地址 config: server-addr: localhost:8848 #Nacos作为配置中心地址 file-extension: yaml #指定yamL格式的配置 # $fspring.application.name}-${spring.profile.active]}.${spring.cLoud.nacos,config.file-extension}
-
application
spring: profiles: active: dev #表示开发环境
-
-
主启动类
@EnableDiscoveryClient @SpringBootApplication public class NacosConfigClientMain3377 { public static void main(String[] args) { SpringApplication.run(NacosConfigClientMain3377.class,args); } }
-
业务类
@RestController @RefreshScope //支持nacos动态刷新 public class ConfigClientController { @Value("${config.info}") private String configInfo; @GetMapping("/config/info") public String getConfigInfo(){ return configInfo; } }
-
在NACOS中添加配置信息
配置规则:Nacos中的dataid的组成格式及与SpringBoot配置文件中的匹配规则
-
自带动态刷新
2.3.2 分类配置
namespace、group、dataid三者关系
默认情况:
Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT
Nacos默认的命名空间是public,Namespace主要用来实现隔离。
比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去
Service就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。比方说为了容灾,Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
最后是Instance,就是微服务的实例。
DataId配置方案
-
指定spring.profile.active和配置文件的DatalD来使不同环境下读取不同的配置
-
默认空间+默认分组+新建dev和test两个dataid,通过spring.profile.active属性就能进行多环境下配置文件的读取,测试:
想切换哪个环境就换成哪个环境
group分组方案
namespace空间方案
2.4 Nacos集群持久化配置
集群架构说明
- 默认Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。
持久化切换配置
-
Nacos默认自带的是嵌入式数据库derby
-
derby到mysql切换配置步骤
-
nacos的conf目录下找到sql脚本:nacos-mysql.sql,在数据库中执行
-
nacos的conf目录下找到application.properties:在最后添加以下内容
spring.datasource.platform=mysql db.num=1 db.url.O=jdbc:mysql://127.0.0.1:3306/nacos_config? characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=admin
-
最后进入nacos测试,发布配置文件,发现在数据库中有:
-
2.5 Nacos的Linux安装
- 下载地址:https://github.com/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.tar.gz(1.4.1版本)
- 在opt目录中解压即可
2.6 集群配置(上)
-
在Linux上Mysql数据库配置,跟在windows上一致,需要新建nacos_config库并生成表
-
application.properties配置,跟windows上一致
-
Linux服务器上nacos集群配置cluster.conf
-
梳理出三台不同nacos集群的服务端口号:3333、4444、5555(cluster.conf)
-
-
编辑nacos的启动脚本startup.sh,使他能够接受不同的启动端口:
2.7 集群配置(下)
测试:启动3333、4444、5555,启动nginx,测试网址:http://192.168.200.130:1111/nacos/#/login,登录密码均为nacos!
(一定要注意如果访问失败很有可能是端口号没有打开!!!)
新建一条配置测试:
微服务cloudalibaba-provider-payment9002注册进nacos集群:
修改配置文件:
server:
port: 9002
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
#server-addr: localhost:8848 #配置Nacos地址
#换成nginx的1111端口,做集群
server-addr: 192.168.200.130:1111
management:
endpoints:
web:
exposure:
include: '*'
3. Sentinel熔断与限流
3.1 简介
是什么
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel以流量为切入点,从流量控
制、熔断降级、系统负载保护等多个维度保护服务的稳定性。一句话,优化版的Hystrix。
特征
- 丰富的应用场景:Sentinel承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(即突
发流量控制在系统容量可以承受的范围)、裆息削峰填谷、集群流量控制、实时熔断下游不可用应
用等。 - 完备的实时监控:Sentinel同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器
秒级数据,甚至500台以下规模的集群的汇总运行情况。 - 广泛的开源生态:Sentinel提供开箱即用的与其它开源框架/库的整合模块,例如与Spring Cloud.
Dubbo、gRPC的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入Sentinel,
完善的SPI扩展点: Sentinel提供简单易用、完善的SPI扩展接口。您可以通过实现扩展接口来快
速地定制逻辑。例如定制规则管理、适配动态数据源等。
3.2 下载运行
-
下载地址:https://github.com/alibaba/Sentinel/releases/download/1.7.0/sentinel-dashboard-1.7.0.jar
-
sentinel分为两部分:
- 核心库(Java客户端)不依赖任何框架/库,能够运行于所有Java运行时环境,同时对Dubbo /
Spring Cloud等框架也有较好的支持。 - 控制台(Dashboard)基于Spring Boot开发,打包后可以直接运行,不需要额外的Tomcat等应用
容器。
- 核心库(Java客户端)不依赖任何框架/库,能够运行于所有Java运行时环境,同时对Dubbo /
-
安装:
-
在目录下命令行中输入:java -jar .\\sentinel-dashboard-1.7.0.jar
-
输入localhost:8080,进入sentinel页面,用户名密码均为sentinel
-
3.3 Sentinel初始化监控
新建一个Module:cloudalibaba-sentinel-service8401
-
POM
<dependencies> <!-- alibaba sentinel --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-sentinel</artifactId> </dependency> <!-- sentinel-datasource-nacos 后续做持久化用到--> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!--SpringCloud ailibaba nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> 今天来看看阿里巴巴的新一代微服务解决方案 Spring Cloud Alibaba
Spring Boot,Spring Cloud,Spring Cloud Alibaba 版本选择说明以及整理归纳
一套完整的Spring Cloud Alibaba视频教程(非广告)
Spring Cloud Alibaba Nacos 使用详解
基于Spring Cloud Alibaba + mybatis 分布式微服务高并发架构 数据平台化(中台)思想+多租户saas企业开发架构技术选型和设计方案
基于Spring Cloud Alibaba 前后端分离架构分布式微服务高并发架构 数据平台化(中台)思想+多租户saas企业开发架构技术选型和设计方案