1,Feign是一个声明式的webservice客户端,使用feign能让编写的WebService客户端更加简单
2,使用方法:定义一个服务接口在上面添加注解,Feign也支持可插拔是的编码器和解码器,Spring Cloud对Feign进行了封装使其支持了Spring MVC标准注解和HttpMessageConverters,Feign可与Eureka和Ribbon组合使用以支持负载均衡;
3,能干吗?
旨在使编写java Http客户端变得更容易
以前项目中使用Ribbon+RestTemplate,利用RestTemplate对http请求进行封装,形成一套模板化的调用方法,但是实际开发中,对于服务的依赖的调用可能不止一处,往往一个接口可能会被多处调用,所有通常回对每一个微服务自行封装一些客户端来包装这些依赖服务的调用,
Feign集成了Ribbon
利用Ribbon维护了服务提供者的服务列表信息,并且通过轮询实现了客户端的负载均衡,而与Rebbion不同的是,通过Feign只需要定义服务绑定接口且以声明式的方法,简单的实现服务调用
4 ,feign和openFeign
5,使用步骤
接口+注解(@FeignClient)
主启动类加上@EnableFeignClients
@SpringBootApplication
@EnableFeignClients
public class OrderOpenFeign {
public static void main(String[] args) {
SpringApplication.run(OrderOpenFeign.class, args);
}
}
创建调用的生产者接口,注意路径一定要对,另外实例名称一定要填
spring:
application:
name: cloud-payment-service
**/
@Component
@FeignClient("cloud-payment-service")
public interface PaymentFeignService {
@GetMapping(value = "/payment/get/{id}")
public CommonResult getPaymentById(@PathVariable("id") Long id);
@GetMapping(value = "/payment/feign/timeout")
public String paymentTimeout();
}
6,OpenFeign的超时控制
Feign客户端默认只等待1s,如果服务端处理需要1s,那么Feign客户端不会等待,直接返回报错为了避免这样,我们需要设置feign客户端的超时控制
ribbon:
readTimeout:5000
connectTimeout:5000