feign 第一次调用超时_Spring Cloud Sentinel整合Feign

环境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正常了;下面列出官方给出的版本依赖:

32f2521bc8a68a54bbf6d097a31106c0.png

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 服务动态配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值