第三十六章 1024电商平台-Gateway网关引入和功能测试
第1集 1024电商平台网关Gateway项目开发和配置
简介:网关Gateway项目开发和配置
- 依赖添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--添加nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 启动类配置
- 路由映射配置
server:
port: 8889
spring:
application:
name: api-gateway
cloud:
#注册中心地址
nacos:
discovery:
server-addr: 112.74.55.160:8848
gateway:
routes: #数组形式
- id: product-service #商品服务 路由唯一标识
uri: lb://xdclass-product-service #从nocas进行转发
order: 1 #优先级,数字越小优先级越高
predicates: #断言 配置哪个路径才转发,前端访问路径统一加上XXX-server,网关判断转发对应的服务,如果是回调业务记得修改
- Path=/product-server/**
filters: #过滤器,请求在传递过程中通过过滤器修改
- StripPrefix=1 #去掉第一层前缀,转发给后续的路径
#开启网关拉取nacos的服务
discovery:
locator:
enabled: true
#设置日志级别,ERROR/WARN/INFO/DEBUG,默认是INFO以上才显示
logging:
level:
root: INFO
com.alibaba.nacos.client.config.impl: WARN
第2集 1024电商平台整体功能测试验证《上》
简介:1024电商平台整体功能测试验证《上》
- 用户微服务验证
- 优惠券微服务验证
- 商品微服务验证
第3集 1024电商平台整体功能测试验证《下》
简介:1024电商平台整体功能测试验证《下》
-
订单微服务验证
-
大部业务功能都完成了,接下去就是微服务全家桶引入+容器编排部署
第三十七章 微服务配置中心引入和Sentinel限流配置
第1集 1024电商平台Nacos配置中心开发和配置
简介:微服务配置中心引入和配置
- 配置中心引入-common项目添加
<!--配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 配置文件优先级讲解
- 不能使用原先的application.yml, 需要使用bootstrap.yml作为配置文件
- 配置读取优先级 bootstrap.yml > application.yml
- 配置实操
- 服务迁移配置
- 增加bootstrap.yml
spring:
application:
name: xdclass-order-service
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 #Nacos配置中心地址
file-extension: yaml #文件拓展格式
profiles:
active: dev
- 启动微服务服务验证
- 测试是否可以获取配置
浏览器访问
http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=xdclass-coupon-service-dev.yaml&group=DEFAULT_GROUP
部分同学如果出现 config dta not exist 建议重启nacos
除开上述问题,如果还是拉取不到配置(保持和课程版本,文件名一样先)
重新构建下项目
mvn clean package -U
然后重启IDEA
- dataId组成,在 Nacos Spring Cloud 中,dataId 的完整格式如下
${prefix}-${spring.profiles.active}.${file-extension}
prefix 默认为 spring.application.name 的值
spring.profiles.active 即为当前环境对应的 profile
当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
第2集 微服务Nacos配置中心迁移和功能验证
简介:1024电商平台Nacos配置中心开发和功能验证
- 微服务配置迁移
- 微服务功能验证
第3集 高并发下的限流神器Sentinel容器化部署
简介:Sentinel容器化部署
-
什么是Sentinel
- 阿里巴巴开源的分布式系统流控工具
- 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性
- 丰富的应用场景:消息削峰填谷、集群流量控制、实时熔断下游不可用应用等
- 完备的实时监控:Sentinel 同时提供实时的监控功能
- 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合
-
Sentinel 分为两个部分
- 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo、Spring Cloud 等框架也有较好的支持。
- 控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。
-
docker容器化部署sentinel
docker pull bladex/sentinel-dashboard:latest
- 查看镜像
docker images
- 启动Sentinel
docker run --name sentinel -d -p 8858:8858 镜像id
- 访问Sentinel(记得检查防火墙或者网络安全组)
http://公网ip:8858
# 登录密码默认sentinel/sentinel
第4集 微服务整合Sentinel项目依赖配置
简介:微服务整合Sentinel项目依赖配置
- common项目添加依赖(网关也需要添加)
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
- 多个微服务接入Sentinel配置
spring:
cloud:
sentinel:
transport:
dashboard: 192.168.0.88:8858
port: 9999
#dashboard: 8858 控制台端口
#port: 9999 本地启的端口,随机选个不能被占用的,与dashboard进行数据交互,会在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互, 若被占用,则开始+1一次扫描
- 微服务注册上去后,由于Sentinel是懒加载模式,所以需要访问微服务后才会在控制台出现
第5集 网关+微服务Sentinel限流实战和问题引出
简介:微服务Sentinel限流配置实战和问题引出
-
优惠券列表接口限流配置
- 其他的根据实际情况配置
-
默认是在微服务内存中,重启后就丢失
- 解决:持久化配置到配置中心Nacos, 并落地数据库
-
流控协议不明显
- Blocked by Sentinel (flow limiting)
-
影响接口性能的点
- 代码
- CPU、内存
- 带宽、IO
第6集 微服务整合Sentinel自定义降级异常数据开发实战
简介:微服务整合Sentinel自定义降级异常数据开发实战
-
异常种类
FlowException //限流异常 DegradeException //降级异常 ParamFlowException //参数限流异常 SystemBlockException //系统负载异常 AuthorityException //授权异常
-
【新版】实现BlockExceptionHandler并且重写handle方法
@Component public class XdclassUrlBlockHandler implements BlockExceptionHandler { @Override public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException e) throws IOException { } }
第7集 生产环境-Sentinel流控规则持久化到nacos配置中心《上》
简介:微服务Sentinel流控规则持久化到nacos配置中心
- 文档: https://github.com/alibaba/Sentinel/wiki/在生产环境中使用-Sentinel
- 生产环境下更常用 push 模式的数据源
- 流控规则持久化到nacos配置中心配置-common和gateway都添加
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
- 配置持久化数据源
#流控面板ip
sentinel:
transport:
dashboard: 112.74.55.160:8858
#流控规则持久化到nacos配置中心
datasource:
ds1:
nacos:
server-addr: 192.168.0.88:8848
data-id: ${spring.application.name}.json
group-id: DEFAULT_GROUP
data-type: json
rule-type: flow
- 配置中心配置
[
{
"resource":"/test",
"controlBehavior":0,
"count":2,
"grade":1,
"limitApp":"default",
"strategy":0
},
{
"resource":"/api/coupon/v1/page_coupon",
"controlBehavior":0,
"count":1,
"grade":1,
"limitApp":"default",
"strategy":0
}
]
- 解释
resource:资源名,
limitApp:流控针对的调用来源,若为 default 则不区分调用来源
grade:限流类型(QPS 或并发线程数),0代表根据并发数量来限流,1代表根据QPS来进行流量控制
count:限流阈值
strategy:调用关系限流策略
controlBehavior:流量控制效果(直接拒绝、Warm Up、匀速排队)
clusterMode:是否为集群模式,存在问题
第8集 生产环境-Sentinel流控规则持久化到nacos配置中心《下》
简介:微服务Sentinel流控规则持久化到nacos配置中心
-
流控规则持久化测试
-
如果再sentinel控制台修改了配置,会不会反向同步到nacos里???
- 再sentinel控制台修改不会同步到nacos
- 如果要修改策略,只能在nacos里面修改
-
集群流控问题
-
限流测试-重启微服务
-
每个微服务都没做流控限制(优惠券微服务只是做了一个配置的例子)