Feign入门

Feign是一个声明式的Web服务客户端,简化了服务调用。OpenFeign是Feign的升级版,增加了SpringMVC注解支持。在SpringCloud中,OpenFeign结合Ribbon实现负载均衡,并与Hystrix集成提供熔断机制。通过定义Feign客户端接口、配置启动类和降级处理类,可以实现服务间的声明式调用和异常处理。
摘要由CSDN通过智能技术生成

一、Feign简介

        Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便。
它具有可插拔注释支持,包括Feign注解和JAX-RS注解、Feign还支持可插拔编码器和解码器、Spring Cloud增加了对Spring MVC注释的支持,并HttpMessageConverters在Spring Web中使用了默认使用的相同方式。Spring Cloud集成了Ribbon和Eureka,在使用Feign时提供负载平衡的http客户端。

二、OpenFeign简介

        Openfeign的全称是Spring Cloud Openfeign,是Feign(进入停更维护状态)的升级,是Spring 言方推出的-种声明式服务调用和负载均衡组件。
        OpenFeign是一种声明式模板化的HTTP客户端, 在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样。

三、OpenFeign和Feign的关系

  • Openfeign是Spring Cloud对Feign的二次封装,它具有Feign的所有功能。
  • OpenFeign在Feign的基础上增加了对Spring MVC注解的支持,例如: @RequestMapping、 @GetMapping 和@PostMapping等。 

四、OpenFeign 的使用

1、导入依赖

<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、 调用服务时

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

五、Feign整合Ribbon

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

  • 全局配置

    ribbon.属性 = 值

  • 指定服务配置

    服务名称.ribbon.属性 = 值

Ribbon常用配置:

  • ConnectionTimeout 连接超时

  • ReadTimeout 读取超时

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

  • MaxAutoRetries 最大重试次数

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

六、Feign整合Hystrix

Feign默认整合了Hystrix的熔断机制

Feign可以单独定义类,编写降级方法

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

 PS: 如果feign接口和降级类和服务提供者项目不是同一个项目,需要加包的扫描

@SpringBootApplication(scanBasePackages ={"com.blb.orderservice","com.blb.common"}) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值