一,版本介绍
springboot和springcloud对应版本:https://spring.io/projects/spring-cloud

springcloud和SpringCloudAlibaba对应版本:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明

springboot和springcloud对应版本:https://spring.io/projects/spring-cloud

springcloud和SpringCloudAlibaba对应版本:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明

1,下载安装包
安装包下载链接:https://github.com/alibaba/nacos/releases,如果觉得github下载太慢,也可以使用我下载好的,通过天翼网盘下载链接:https://cloud.189.cn/web/share?code=nQ32uejeIFbm(访问码:d1r7),linux系统选择`.tar.gz`, windows系统选择zip
如果是linux系统可以通过如下命令,解压下载的安装包:
下载sentinel的jar:
Java -jar sentinel-dashboard-1.8.8.jar
| 配置项 | 说明 |
|---|---|
| 资源名:resource | 限流规则的作用对象,最常用的资源是我们代码中的 Java 方法,一段代码,或者一个接口 |
| 针对来源: limitApp | 流控针对的调用来源,填写微服务名,default代表不区分调用来源 |
| 阀值类型: grade | - QPS:每秒请求数,当前调用该api的QPS到达阈值的时候进行限流 - 线程数: 当调用该api的并发线程数到达阈值的时候,进行限流 |
| 单机/均摊/总体阀值:count | 阀值类型是QPS表示每秒的请求数;阀值类型是线程数表示并发线程数 |
| 流控模式:strategy | 直接; 关联; 链路 |
| 流控效果: controlBehavior | 直接拒绝; 排队等待; 慢启动模式 |
| 注意:同一个资源可以设置多个流控规则,我们可以通过代码定义流量控制规则也可以通过在sentinel控制台进行配置,一般我们都是使用控制台进行配置,下面是一个代码配置的方式: |
Feigen由 Netflix 开发并开源,最初作为 Netflix OSS 的一部分,用于简化 HTTP API 的客户端调用,Netflix Feign 已停止维护,最终版本为 9.x。OpenFeigen由Spring Cloud 团队基于 Feign 开发的增强版,整合到 Spring Cloud 生态中。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<properties>
<spring-cloud.version>2021.0.7</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
什么是分布式事务:事务的参与者、资源服务器及事务管理器分别位于不同系统节点上,用于保障跨节点操作数据一致性的事务类型,其核心目标是实现跨多个服务或数据库的 ACID 属性(原子性、一致性、隔离性、持久性)
分布式事务:
强一致性:追求像本地数据库事务一样的ACID(原子性、一致性、隔离性、持久性),要么全成功,要么全失败,且实时可见。典型代表是XA协议(两阶段提交)。
最终一致性:允许在短时间内数据不一致,但保证在最终某个时间点数据会达成一致。这是互联网高并发场景下的主流选择。
前言:nacos的服务端window/linux安装和启动教程请看另一篇文章

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
注册表结构是nacos v1.X版本,是在nacos的源码中,不是在spring-cloud-starter-alibaba-nacos-discovery中,大家不用在问为什么找不到源码了
package com.alibaba.nacos.naming.core;
@Component
public class ServiceManager implements RecordListener<Service> {
/**
* Map(namespace, Map(group::serviceName, Service)).
*/
private final Map<String, Map<String, Service>> serviceMap = new ConcurrentHashMap<>();
// 省略部分代码………
}
熔断和限流的对比:
@RestController
@RequestMapping("/sentinel")
public class SentinelController {
private Integer index = 0;
private Integer abnormal = 2;
@RequestMapping("/slowCount")
public String slowCount() throws InterruptedException {
index++;
// 访问abnormal次出现1次异常
if(index % abnormal == 0){
Thread.sleep(600);
}
return "slowCount";
}
}
@RequestMapping和@SentinelResource的对比:Sentinel 默认将 @RequestMapping 的路径作为资源名,@RequestMapping只能做一些简单限流,只能Controller 方法使用;而@SentinelResource的value作为资源名@SentinelResource复杂场景Service 层或任意方法。注意如果两个@RequestMapping的路径和@SentinelResource值同时设置并且一样,在控制台添加的限流或者熔断规则会优先使用@RequestMapping的路径定义的资源,@SentinelResource注解配置会失效,所以建议使用@SentinelResource声明资源的时候尽量保证和@RequestMapping的路径不一样。