1.Sentinel服务器容错
(本文参考黑马程序员项目)
个人仓库地址:https://gitee.com/jkangle/springboot-exercise.git
在服务器中,由于网络原因可能会出现线程阻塞的情况,当线程阻塞的时候如果有大量的请求涌入,就会造成当前的服务瘫痪,由于服务与服务之间的依赖关系,故障会出现传播的情况,这样会造成服务器的雪崩效应。
因此就需要一种容错方案。有一些常见的容错组件就很好的包含一些容错方案,例如阿里巴巴开源的一款断路由器实现sentinel.
1.简单入门使用
1.1安装sentinel控制台
安装完成后直接用java命令运行(需要注意的是这样并不会将数据永久存储,如果你运行的sentinel关闭所有的数据这些就会消失)
1.2导入依赖
在本次项目的shop-order中
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2021.1</version>
</dependency>
1.3修改配置文件
server:
port: 8091
spring:
application:
name: service-order
main:
allow-circular-references: true
cloud:
nacos:
discovery:
server-addr: localhost:8848
sentinel:
transport:
dashboard: localhost:8080
eager: true
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/shop?characterEncoding=UTF-8
username: root
password:
jpa:
properties:
hibernate:
hbm2ddl:
auto: update
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
可能出现如图的错误,这是因为存在依赖的循环,就是sentinel下的某一个类,循环依赖了(A中注入了B,B中也注入了A), 原因就是新版本的Spring默认不允许循环依赖!具体的分析看这位大佬的文章http://t.csdn.cn/6OeQp
1.4写一个测试案例
package org.example.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OrderController1 {
@RequestMapping("/order/massage1")
public String massage1(){
return "massage1";
}
@RequestMapping("/order/massage2")
public String massage2(){
return "massage2";
}
}
1.5通过浏览器进入控制台
当启动测试案例,不停的刷新,这边就可以监控
1.6实现一个限流接口
当超过设置的流控之后就会出现