温馨提示:全套教程请查看 教程总览
Sentinel是分布式系统的流量防卫兵。
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度保护服务的稳定性。
Sentinel 具有以下特征:

Sentinel 分为两个部分:
如果要在我们的项目中引入 Sentinel,使用 group ID 为 com.alibaba.cloud 和 artifact ID 为 spring-cloud-starter-alibaba-sentinel 的 starter。
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
dependency>
参考文档 请查看 官网
有关 cloud-consumer-feign 服务的搭建过程,请参考之前的章节 基于Spring Boot 3.x 搭建教程
pom.xml 内容如下:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>org.ashgroupId>
<artifactId>spring-cloud-alibaba-demoartifactId>
<version>${revision}version>
parent>
<artifactId>cloud-consumer-feignartifactId>
<description>服务消费者-feigndescription>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-loadbalancerartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<executions>
<execution>
<goals>
<goal>repackagegoal>
goals>
execution>
executions>
plugin>
plugins>
<resources>
<resource>
<directory>src/main/javadirectory>
<excludes>
<exclude>**/*.javaexclude>
excludes>
resource>
<resource>
<directory>src/main/resourcesdirectory>
<includes>
<include>**/*.*include>
includes>
resource>
resources>
build>
project>
新建 FeignServiceFallback.java 服务降级类,实现 FeignService.java 并实现方法

内容如下:
package org.ash.consumer.feign.service.fallback;
import org.ash.consumer.feign.service.FeignService;
import org.springframework.stereotype.Component;
@Component
public class FeignServiceFallback implements FeignService {
@Override
public String getProviderTest(String message) {
return "对方服务不可用,开始服务降级处理";
}
}
改造 FeignService.java 的 @FeignClient 注解,添加 fallback 属性
内容如下:
package org.ash.consumer.feign.service;
import org.ash.consumer.feign.service.fallback.FeignServiceFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(value = "cloud-provider", fallback = FeignServiceFallback.class)
public interface FeignService {
@GetMapping("/provider/test/{message}")
public String getProviderTest(@PathVariable("message") String message);
}
默认 sentinel 对 feign 的支持是关闭的,我们需要在配置文件中打开。
内容如下:
server:
port: 9003
spring:
application:
# 服务名称
name: cloud-consumer-feign
cloud:
nacos:
# nacos注册中心
discovery:
# 服务ip:port
server-addr: 127.0.0.1:8848
openfeign:
client:
config:
default:
#连接超时时间
connectTimeout: 5000
#读取超时时间
readTimeout: 5000
# 开启feign集成sentinel服务降级
feign:
sentinel:
enabled: true
management:
endpoints:
web:
exposure:
include: '*'


打开浏览器调用我们之前写的测试接口 http://localhost:9003/consumer/feign/test/open-feign,成功返回消息

这时我们停止服务提供者 cloud-provider 服务

然后再次通过浏览器调用测试接口 http://localhost:9003/consumer/feign/test/open-feign,看到返回服务降级的信息,表示服务降级成功

至此,OpenFeign集成Sentinel实现服务降级成功!!!
温馨提示:全套教程请查看 教程总览