配置文件
# 应用名称 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:
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主要支持一下几种规则:
流量控制规则
熔断降级规则
系统保护规则
来源访问控制规则
动态规划扩展
流量控制规则实现