SpringCloud之Feign

一、什么是Feign?

Feign是一个基于Java的声明式HTTP客户端框架,用于简化与RESTful API的交互。它是Spring Cloud生态系统中的一个组件,旨在使微服务之间的通信更加简单和优雅。

二、为什么要使用Feign?

起初微服务之间的调用是通过RestTemplate,调用比较复杂,url需要拼接,使用不太方便,而使用Feign,它是SpringCloud提供的声明式的HTTP客户端,只用编写接口,就能够通过http请求实现服务的调用。

三、介绍OpenFeign

OpenFeign = RestTemplate + Ribbon + Hystrix

OpenFeign是Feign的扩展,能够支持SpringMVC注解。与Feign相比,OpenFeign的一个主要改进是集成了Spring Cloud的服务发现功能,可以与注册中心(如Eureka、Consul等)无缝集成,简化了服务之间的调用。OpenFeign还提供了对Hystrix的集成,可以方便地实现服务的容错和故障转移。

使用OpenFeign,你只需要添加相应的依赖和配置,然后定义接口来描述API,并使用注解来指定请求的类型、路径、参数等。OpenFeign会自动生成具体的HTTP请求代码,并处理响应,让你能够以一种直观和简洁的方式与远程服务进行通信。

四、OpenFeign的使用

1.导入OpenFeign依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.编写Feign客户端接口

/**
 * 调用商品服务的Feign客户端
 * @FeignClient需要设置调用的服务名
 */
@FeignClient("product-service")
public interface ProductServiceFeignClient{

    /**
     * 调用商品id查询
     * @param id
     * @return
     */
    @GetMapping("/product/{id}")
    ResponseEntity<Product> getProductById(@PathVariable Long id);
}

3.启动类加注解扫描feign接口 @EnableFeignClients(basePackages = "com.blb.orderservice.feign")

4.调用服务时,使用IOC容器实例接口对象,直接调用feign配置类中的方法。

@Autowired
private ProductServiceFeignClient productServiceFeignClient;


//使用feign客户端调用服务
ResponseEntity<Product> entity = productServiceFeignClient.getProductById(order.getProductId());

 五、Feign使用

Feign整合Ribbon(负载均衡)

Feign默认整合了Ribbon实现负载均衡

  • 全局配置

    ribbon.属性 = 值

  • 指定服务配置

    服务名称.ribbon.属性 = 值

Ribbon常用配置:

  • ConnectionTimeout 连接超时

  • ReadTimeout 读取超时

  • OkToRetryOnAllOperations 对所有操作启动重试机制 true/false

  • MaxAutoRetries 最大重试次数

  • MaxAutoRetriesNextServer 最大重试下个服务器次数

 Feign整合Hystrix

Feign默认整合了Hystrix 的熔断机制。可以单独编写定义类,编写降级方法。

实现:

1.定义降级处理类,实现对应的FeignClient接口

2.实现接口中的方法,所有方法均为降级方法

/**
 * 降级处理类
 */
@Component
public class ProductServiceFallback implements ProductServiceFeignClient {

    /**
     * 降级方法返回兜底数据
     */
    @Override
    public ResponseEntity<Product> getProductById(Long id) {
        Product product = new Product(id,"降级数据", BigDecimal.valueOf(0),"测试");
        return ResponseEntity.ok(product);
    }

}

3.在FeignClient注解中配置降级方法处理类

@FeignClient(value = "product-service",fallback = ProductServiceFallback.class)

4.启动Feign的Hystrix特性

feign.hystrix.enabled=true

Feign工作原理

六、总结

总的来说,Feign是一个用于轻松创建RESTful客户端的Java库。它是Netflix开源的项目之一,功能强大且易于使用。Feign的使用简单,可以减少大量的样板式的工作量,还整合了Ribbon和Hystrix,与这两个库无缝集成,Feign能够以更强大和可靠的方式调用远程服务。Feign支持多种协议,包括HTTP、HTTPS、HTTP/2和WebSocket。这使得Feign能够与各种类型的服务进行通信,并且可以根据需要轻松切换协议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值