open Feign能干什么?
open Feign的遵旨是使编写Java HTTP客户端变得更加容易
前面在使用RestTemplate + Ribbon时,利用Rest Template对HTTP请求的封装处理,形成了一套模板化的调用方法,但是在实际开发中,由于对服务的调用可不止一处,往往一个接口会被多处调用,所以通常都会征对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以open Feign在此基础上作了进异步封装,由他来帮助我们定义和实现依赖服务接口的定义。在open Feign的实现下,我们只需要创建一个接口并使用注解的方式来配置它(以前时Dao接口上标注@Mapper注解,现在是一个微服务接口上标注@FeignClient即可),即可完成对服务提供方的接口绑定,简化了spring cloud Ribbon时,自动封装服务调用客户端的开发量。
open Feign集成了Ribbon
利用Ribbo维护了服务列表信息,并且通过轮询实现了客户端的负载均衡。而与Ribbon不同的是,通过open Feign只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务之间的调用。
open Feign超时?
默认open Feign客户端只等待1秒钟,但是服务端处理需要超过1秒钟,直到open Feign客户端不想等待。
新建cloud-order-feign80的model
- 改pom.xml 添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 写application.yml文件
server:
port: 9001
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
#设置feign客户端超时时间(openFeign默认支持Ribbon)
ribbon:
# 配置建立连接所用时间,使用与网络状态正常的情况下,两端连接所用的时间
ReadTimeout: 5000
# 配置连接后从服务器读取到可用资源所用的时间
ConnectTimeout: 5000
logging:
level:
# feign以什么级别监控那个接口
com.sumeng.springcloud.service.PaymentFeignService: debug
- 修改主程序
@SpringBootApplication
@EnableFeignClients
public class OrderFeign9001 {
public static void main(String[] args) {
SpringApplication.run(OrderFeign9001.class,args);
}
}
- 新建service接口 其中 @FeignClient("服务名称")
@Component
@FeignClient("CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {
@GetMapping("/payment/list")
public JsonResult list();
@GetMapping("/payment/feign/timeout")
public String paymentFeignTimeout();
}
- 写controller
@RestController
@Slf4j
public class PaymentController {
@Resource
private PaymentFeignService paymentFeignService;
@GetMapping("/consumer/payment/list")
public JsonResult getList(){
return paymentFeignService.list();
}
@GetMapping("/consumer/payment/feign/timeout")
public String getTimeout(){
return paymentFeignService.paymentFeignTimeout();
}
}
- feign日志配置
@Configuration
public class FeignLog {
@Bean
Logger.Level feignlog(){
return Logger.Level.FULL;
}
}
测试
总结
open Feign底层自带Ribbon负载均衡