环境springboot2.2.10
1、pom.xml依赖
1.8
Hoxton.SR3
2.2.3.RELEASE
org.springframework.boot
spring-boot-starter-web
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-openfeign
com.alibaba.cloud
spring-cloud-alibaba-dependencies
${spring-cloud-alibaba.version}
pom
import
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
这里需要注意版本问题:
一开始我spring cloud 版本用的是SR1, spring cloud alibaba版本用的是2.2.3,服务无法启动,具体原因没有研究。cloud换成SR3正常了;下面列出官方给出的版本依赖:
2、application.yml配置文件
server:
port: 9500
---
spring:
application:
name: sentinel-feign
---
spring:
cloud:
nacos:
discovery:
enabled: true
serverAddr: localhost:8848 #nacos服务注册中心
---
spring:
cloud:
sentinel:
eager: true #关闭懒加载
filter:
enabled: true #打开/关闭掉对Spring MVC端点的保护
transport:
port: 8740
dashboard: localhost:8080 #指定sentinel控制台的地址
heartbeatIntervalMs: 3000 #心跳间隔
---
feign:
httpclient:
connectionTimeout: 5000
client:
config:
default: #这里可以是具体的服务名称
connectTimeout: 2000 # 相当于Request.Optionsn 连接超时时间
readTimeout: 2000 # 相当于Request.Options 读取超时时间
loggerLevel: full
---
feign:
sentinel:
enabled: true # 这里是sentinel与feign整合必须开启的。
---
debug: false
3、启动类
@SpringBootApplication
@EnableDiscoveryClient // 开启服务发现
@EnableFeignClients // 开启feign功能
public class AlibabaSentinelFeignApplication {
public static void main(String[] args) {
SpringApplication.run(AlibabaSentinelFeignApplication.class, args);
}
}
4、Feign接口定义
@FeignClient( value = "nacos-provider", fallbackFactory = NacosProviderFallbackFactory.class)
public interface NacosProviderFeignService {
@GetMapping("/discovery/get")
public Object get(@RequestParam String serviceName) ;
}
这里的nacos-provider服务请查看《SpringCloud Nacos 服务提供者》
5、NacosProviderFallbackFactory工厂
@Component
public class NacosProviderFallbackFactory implements FallbackFactory {
@Resource
private NacosProviderFallback providerFallback ;
@Override
public NacosProviderFallback create(Throwable cause) {
cause.printStackTrace() ;
return providerFallback ;
}
}
6、NacosProviderFallback.java
@Component
public class NacosProviderFallback implements NacosProviderFeignService {
@Override
public Object get(String serviceName) {
return "Sentinel+Feign 请求失败了,参数 " + serviceName ;
}
}
以上3个类就是feign的基本使用。
7、测试类
@RestController
@RequestMapping("feign")
public class FeignController {
@Resource
private NacosProviderFeignService feignService ;
@GetMapping("/get")
public Object get(String serviceName) {
return feignService.get(serviceName) ;
}
}
测试结果:
当把nacos-provider服务停了后会调用NacosProviderFallback中的对应的回调方法。
加入限流功能
语法:
httpmethod:protocol://requesturl
在这里 我们在sentinel中配置的流控规则的 资源名应该为:
GET:http://nacos-provider/discovery/get
这样配置完以后就实现了限流功能。
其他文章:
Spring MVC 异常处理方式
Spring Cloud Sentinel 熔断降级
SpringCloud Nacos 整合feign
SpringCloud Nacos 服务动态配置