栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

openFeign

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

openFeign


文章目录
      • 1.Feign是什么?
      • 2.Feign和openFeign有什么区别
      • 3.openFeign如何传参
      • 4.超时设置
      • 5.开启日志增强
      • 6.如何通讯优化
      • 7.如何熔断降级

1.Feign是什么?

Feign集成了Ribbon、RestTemplate实现了负载均衡的执行Http调用,只不过对原有的方式(Ribbon+RestTemplate)进行了封装,开发者不必手动使用RestTemplate调服务,而是定义一个接口,在这个接口中标注一个注解即可完成服务调用,这样更加符合面向接口编程的宗旨,简化了开发。

2.Feign和openFeign有什么区别

3.openFeign如何传参

1、传递JSON数据
这个也是接口开发中常用的传参规则,在Spring Boot 中通过@RequestBody标识入参。

@RestController
@RequestMapping("/openfeign/provider")
public class OpenFeignProviderController {
    @PostMapping("/order2")
    public Order createOrder2(@RequestBody Order order){
        return order;
    }
}
@FeignClient(value = "openFeign-provider")
public interface OpenFeignService {
    
    @PostMapping("/openfeign/provider/order2")
    Order createOrder2(@RequestBody Order order);
}

2、POJO表单传参
这种传参方式也是比较常用,参数使用POJO对象接收。

@RestController
@RequestMapping("/openfeign/provider")
public class OpenFeignProviderController {
    @PostMapping("/order1")
    public Order createOrder1(Order order){
        return order;
    }
}
@FeignClient(value = "openFeign-provider")
public interface OpenFeignService {
    
    @PostMapping("/openfeign/provider/order1")
    Order createOrder1(@SpringQueryMap Order order);
}

3、URL中携带参数
此种方式针对restful方式中的GET请求,也是比较常用请求方式。

@RestController
@RequestMapping("/openfeign/provider")
public class OpenFeignProviderController {

    @GetMapping("/test/{id}")
    public String test(@PathVariable("id")Integer id){
        return "accept one msg id="+id;
}
@FeignClient(value = "openFeign-provider")
public interface OpenFeignService {

    @GetMapping("/openfeign/provider/test/{id}")
    String get(@PathVariable("id")Integer id);
}

4、普通表单参数
此种方式传参不建议使用,但是也有很多开发在用。

RestController
@RequestMapping("/openfeign/provider")
public class OpenFeignProviderController {
    @PostMapping("/test2")
    public String test2(String id,String name){
        return MessageFormat.format("accept on msg id={0},name={1}",id,name);
    }
}
@FeignClient(value = "openFeign-provider")
public interface OpenFeignService {
    
    @PostMapping("/openfeign/provider/test2")
    String test(@RequestParam("id") String arg1,@RequestParam("name") String arg2);
}
4.超时设置

1、设置Ribbon的超时时间(不推荐)
设置很简单,在配置文件中添加如下设置:

ribbon:
  # 值的是建立链接所用的时间,适用于网络状况正常的情况下, 两端链接所用的时间
  ReadTimeout: 5000
  # 指的是建立链接后从服务器读取可用资源所用的时间
  ConectTimeout: 5000

2、设置openFeign的超时时间(推荐)
openFeign设置超时时间非常简单,只需要在配置文件中配置,如下:

feign:
  client:
    config:
      ## default 设置的全局超时时间,指定服务名称可以设置单个服务的超时时间
      default:
        connectTimeout: 5000
        readTimeout: 5000
5.开启日志增强

openFeign虽然提供了日志增强功能,但是默认是不显示任何日志的,不过开发者在调试阶段可以自己配置日志的级别。

openFeign的日志级别如下:

NONE:默认的,不显示任何日志;
BASIC:仅记录请求方法、URL、响应状态码及执行时间;
HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;
FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。
配置起来也很简单,步骤如下:

1、配置类中配置日志级别

2、yaml文件中设置接口日志级别

logging:
  level:
    cn.myjszl.service: debug
6.如何通讯优化

gzip是一种数据格式,采用用deflate算法压缩数据;gzip是一种流行的数据压缩算法,应用十分广泛,尤其是在Linux平台。

GZIP

openFeign支持请求/响应开启GZIP压缩

openFeign开启GZIP

feign:
  ## 开启压缩
  compression:
    request:
      enabled: true
      ## 开启压缩的阈值,单位字节,默认2048,即是2k,这里为了演示效果设置成10字节
      min-request-size: 10
      mime-types: text/xml,application/xml,application/json
    response:
      enabled: true
7.如何熔断降级

openFeign默认支持的就是Hystrix

但是阿里的Sentinel无论是功能特性、简单易上手等各方面都完全秒杀Hystrix,因此此章节就使用openFeign+Sentinel进行整合实现服务降级

1、添加Sentinel依赖

2、配置文件中开启sentinel熔断降级

3、添加降级回调类

4、添加fallback属性

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302049.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号