1、Nacos
1、下载nacos,可以从结尾获取压缩包和源码
2、下方图例是两个服务程序注册成功到注册中心,并且配置从配置中心拉取,成功访问数据库
3、nacos中配置项里的内容
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: "jdbc:mysql://127.0.0.1:3306/train?characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai"
username: root
password: ...
mvc:
pathmatch:
matching-strategy: ant_path_matcher
mybatis-plus:
mapper-locations: classpath*:/mapper/*Mapper.xml
type-aliases-package: com.fs.train.po
configuration:
map-underscore-to-camel-case: true
logging:
level:
com.fs.train: debug
swagger:
enable: true
#数据中台HRestful API请求
feign:
client:
config:
default:
#日志打印级别
loggerLevel: basic
#跨服务接口请求超时
readTimeout: 20000
#跨服务请求连接超时
connectTimeout: 20000
2、openFeign
3、Sentinel
(1)从官网下载 jar 包 下载地址 (或者结尾地址去拿但和你版本不一定匹配)https://github.com/alibaba/Sentinel/releases
首先寻找合适的版本 可以参考 阿里官方的版本对应 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
我的是这个版本
(2)启动
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
账号/密码: sentinel/sentinel
(3)结合SpringBoot配置,并开启规则持久化
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- 独立引入如下依赖,来申明 sentinel 的规则数据存储在 nacos 中。-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
bootstrap.yml
server:
port: 9001
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: c93d6194-9008-4c77-a0b0-e36db74e438e
config:
server-addr: 127.0.0.1:8848
namespace: c93d6194-9008-4c77-a0b0-e36db74e438e
file-extension: yaml #指定配置格式
sentinel:
transport:
port: 9004
dashboard: 127.0.0.1:9003
datasource:
# 名称随意
flow:
nacos:
server-addr: 127.0.0.1:8848
# 命名空间
namespace: c93d6194-9008-4c77-a0b0-e36db74e438e
dataId: ncop-service-provider-flow-rules
groupId: DEFAULT_GROUP
# 规则类型,取值见:
# org.springframework.cloud.alibaba.sentinel.datasource.RuleType
data-type: json
rule-type: flow
application:
name: ncop-service-provider
profiles:
active: dev
nacos配置中心的流控规则
[
{
// 资源名
"resource": "testBlockHandler",
// 针对来源,若为 default 则不区分调用来源
"limitApp": "default",
// 限流阈值类型(1:QPS;0:并发线程数)
"grade": 1,
// 阈值
"count": 2,
// 是否是集群模式
"clusterMode": false,
// 流控效果(0:快速失败;1:Warm Up(预热模式);2:排队等待)
"controlBehavior": 0,
// 流控模式(0:直接;1:关联;2:链路)
"strategy": 0,
// 预热时间(秒,预热模式需要此参数)
"warmUpPeriodSec": 10,
// 超时时间(排队等待模式需要此参数)
"maxQueueingTimeMs": 500,
// 关联资源、入口资源(关联、链路模式)
"refResource": "rrr"
}
]
(4)流量控制
@SentinelResource(value = "testBlockHandler", blockHandler = "blockHandler")
@GetMapping("/getList")
public String getList(){
return "hello,我来啦";
}
public String blockHandler(BlockException t){
return "不是,你谁啊!!!!";
}
注意:
1、流控要用blockHandler = “。。”来标注
2、流控方法的返回类型和参数类型要和原函数相同,并且参数还要加也该BlockException
官方文档
4、代码和安装包
https://gitee.com/truth123/train-for-spring-cloud-alibaba