1.Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。使用方法是定义一个服务接口然后在上面添加注解。在实际开发中,由于服务依赖的调用不可能一处使用,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。
2.用我们以前的cloudalibaba-consumer-nacos-order83工程演示作为客户端
3.pom文件引入openfeign
<!--openfeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
4.主启动类:
@SpringBootApplication //@EnableDiscoveryClient @EnableFeignClients //开启Feign public class OrderApplication83 { public static void main(String[] args) { SpringApplication.run(OrderApplication83.class,args); } }
5.编写对外暴漏借口共调用
6.用我们之前9001和9002为服务提供者,分别启动这三个服务,并访问地址:http://127.0.0.1:83/consumer/payment/nacos/1
再次刷新界面
结果证明Openfeign内部支持负载调用。
Openfeign超时控制
1.在端口9001服务中设置超时
2.在83端口服务中进行调用上面添加的接口,并访问:http://127.0.0.1:83/consumer/payment/feign/timeout
因为feign默认客户端只等待一秒,但服务端处理需要超过一秒,所以就会出现上面的这个错误。
解决办法:
在yml文件添加如下配置:
#设置feign 客户端超时时间(openFeign默认支持ribbon) ribbon: #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间 ReadTimeout: 5000 #指的是建立连接后从服务器读取到可用资源所用的时间 ConnectTimeout: 5000
Openfeign日志增强
在yml配置文件添加如下配置:
logging: level: #feign日志以什么级别监控哪个接口 com.yxw.springcloud.service.PaymentFeignService: debug
在配置日志bean
@Configuration public class FeignConfig { @Bean Logger.Level feignLoggerLevel(){ return Logger.Level.FULL; } }
启动服务访问接口看控制台打印如下信息: