Sentinel高级 (2)

配置文件

# 应用名称 spring: application: name: sentinel-feign-client cloud: sentinel: transport: dashboard: localhost:8045 eureka: client: service-url: defaultZone: :8060/eureka server: port: 8061 # 开启Sentinel对feign的支持 feign: sentinel: enabled: true

启动类添加注解

@SpringBootApplication @EnableFeignClients @EnableDiscoveryClient class SentinelFeignClientApplication fun main(args: Array<String>) { runApplication<SentinelFeignClientApplication>(*args) }

创建sentinel-feign-provider

添加依赖

dependencies { implementation("org.springframework.boot:spring-boot-starter-web") implementation("com.fasterxml.jackson.module:jackson-module-kotlin") implementation("org.jetbrains.kotlin:kotlin-reflect") implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") implementation("org.springframework.cloud:spring-cloud-starter-netflix-eureka-client") implementation("org.springframework.cloud:spring-cloud-starter-openfeign") testImplementation("org.springframework.boot:spring-boot-starter-test") { exclude(group = "org.junit.vintage", module = "junit-vintage-engine") } } dependencyManagement { imports { mavenBom("org.springframework.cloud:spring-cloud-dependencies:${property("springCloudVersion")}") mavenBom("org.springframework.cloud:spring-cloud-dependencies:${property("springCloudVersion")}") } }

修改配置文件

# 应用名称 spring.application.name=sentinel-feign-provider # 应用服务 WEB 访问端口 server.port=8062 eureka.client.service-url.defaultZone=http://127.0.0.1:8060/eureka

启动类增加注解

@SpringBootApplication @EnableDiscoveryClient @EnableFeignClients class SentinelFeignProviderApplication fun main(args: Array<String>) { runApplication<SentinelFeignProviderApplication>(*args) }

提供接口

@RestController class ProviderController { @GetMapping("hello") fun hello(): String { return "Hello Feign Sentintl" } }

运行测试

启动项目,在Sentinel控制台中增加关于资源流控规则.Sentinel和Feign整合时,流控规则的编写形式为:http请求方式:协议//服务名称/请求路径跟参数 例如GET:

image-20210305114854627

Sentinel对Spring Cloud Gateway的支持

从1.6.0版本开始,Sentinel提供了Spring Cloud Gateway的适配模块,可以提供两种资源维度的限流:

route维度:即在Spring的配置文件种配置的路由条目,资源名对应相应的routeId

自定义API维度:用户可以利用Sentinel提供的API来自定义一些API分组

微服务网关搭建

在上面基础上创建

创建子工程sentinel-gateway,在build.gradle.kts中引入依赖

implementation("org.springframework.cloud:spring-cloud-starter-gateway") 整合Sentinel

导入依赖

implementation("com.alibaba.cloud:spring-cloud-starter-alibaba-sentinel") implementation("com.alibaba.cloud:spring-cloud-alibaba-sentinel-gateway")

创建一个配置类,配置流控降级回调操作

@Configuration class GatewayConfiguration { @PostConstruct fun doInit() { GatewayCallbackManager.setBlockHandler(BlockRequestHandler { serverWebExchange: ServerWebExchange?, throwable: Throwable? -> return@BlockRequestHandler ServerResponse.status(200).bodyValue("系统繁忙,请稍后再试!") }) } }

路由的配置

# 配置路由 spring.cloud.gateway.routes[0].id=sentinel-feign-gateway # lb代表的是 Load Balance负载均衡,如果是一个服务(auth-service)多个实例,实现自主分发 spring.cloud.gateway.routes[0].uri=lb://sentinel-feign-client # 匹配路径 spring.cloud.gateway.routes[0].predicates[0]=Path=http://www.likecs.com/hello/** # 配置Stentinel的控制台地址 spring.cloud.sentinel.transport.dashboard=http://localhost:8045

流量控制实现

Sentinel的所有规则都可以在内存太中动态的查询及修改,修改之后立即生效。同时Sentinel也提供相关API,供您来定制自己的规则策略。

Sentinel主要支持一下几种规则:

流量控制规则

熔断降级规则

系统保护规则

来源访问控制规则

动态规划扩展

流量控制规则实现

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppfpw.html