2021升级版微服务教程7-OpenFeign实战开发和参数调优

原创
01/18 19:04
阅读数 1.9K

2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」

教程全目录「含视频」https://gitee.com/bingqilinpeishenme/Java-Wiki

OpenFeign实战开发和参数调优

OpenFeign基本使用

OpenFeign简介

OpenFeign是一个声明式的http客户端,让编写web服务客户端变的非常容易,只需要创建一个接口并在接口上添加注解即可,OpenFeign的前身是Feign,后者目前已经停更了,OpenFeign是SpringCloud在Feign的基础上支持了Spring MVC的注解,并通过动态代理的方式产生实现类来做负载均衡并进行调用其他服务。

Ribbon+RestTemplate过于繁琐,通过OpenFeign可以简化开发

基本使用

以用户服务调用商品为例

用户服务配置 OpenFeign

  1. 导入依赖

    <dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-openfeign</artifactId>
    		</dependency>
    
  2. 启动类上加注解

    1594003407081

在商品服务中写被调用接口(无参接口测试)

image-20210106170542955

在用户服务中 直接使用Feign写服务调用

  1. 创建一个普通的Java接口

    image-20210106164841421

  2. 通过注解声明当前接口为 Feign的客户端

    image-20210106164857772

  3. 在Feign接口中 写服务调用的方法

    image-20210106170626537

  4. 在用户服务的Controller中使用Feign接口

    image-20210106170650566

  5. 启动所有服务 两个商品服务 一个用户服务 注册中心 访问用户服务观察服务调用

    访问用户服务的Controller 可以看到负载均衡的效果

    image-20210106170751469

    image-20210106170805767

  6. 流程

    1594004633229

关于传递参数的处理

参数传递都是json 实际上是RestFul的请求

  1. /{} 拼接参数

    1. 被调用接口示例【商品服务】

      image-20210106171156012

    2. Feign接口示例【用户服务】

      image-20210106171220466

  2. ?拼接参数 对应常见请求类型Get请求

    1. 被调用接口示例【商品服务】

      image-20210106171304020

    2. Feign接口示例【用户服务】

      image-20210106171415861

  3. 请求体传递参数 对应常见请求Post请求

    1. 被调用接口示例【商品服务】

      image-20210106171535072

    2. Feign接口示例【用户服务】

      image-20210106171644918

开启日志

Feign 和 RestTemplate 不一样 ,对请求细节封装的更加彻底,不管是请求还是请求的参数,还是响应的状态都看不到,想要看到请求的细节需要通过Feign的日志

Feign日志的配置

1.配置类 @Bean

image-20200319112307671

[@Bean](https://my.oschina.net/bean)
public Logger.Level feignConfig(){
    return Logger.Level.FULL;
}

2.在配置文件中开启Feign接口所在包的日志

image-20210106172033726

通过以上配置 重启项目 再次使用Feign服务调用 就会看到如下日志:

image-20200421164205211

image-20200421164257236

Feign参数调优

1. 替换OKHttp

在默认情况下 spring cloud feign在进行各个子服务之间的调用时,http组件使用的是jdk的HttpURLConnection,没有使用线程池。

有2种可选的线程池:HttpClient和OKHttp,比较推荐OKHttp,请求封装的非常简单易用,性能也很ok。

添加依赖

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
</dependency>

修改配置文件

feign:
  okhttp:
    enabled: true
  httpclient:
    enabled: false
    max-connections: 1000
    max-connections-per-route: 100

max-connections:最大连接数

max-connections-per-route:每个url的连接数

2. 开启Feign请求响应压缩

开启压缩可以有效节约网络资源,但是会增加CPU压力,建议把最小压缩的文档大小适度调大一点

## 开启Feign请求响应压缩
feign.compression.request.enabled=true

feign.compression.response.enabled=true
## 配置压缩文档类型及最小压缩的文档大小
feign.compression.request.mime-types=text/xml,application/xml,application/json

feign.compression.request.min-request-size=2048

如果你觉得这篇内容对你挺有有帮助的话:

  1. 点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)

  2. 欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程。

  3. 觉得不错的话,也可以关注 编程鹿 的个人公众号看更多文章和讲解视频(感谢大家的鼓励与支持🌹🌹🌹)

展开阅读全文
打赏
3
7 收藏
分享
加载中
试了一下 各种异常 最后还没调通
01/19 14:25
回复
举报
编程鹿博主
emmm 微服务的异常原因比较多 具体问题具体分析 博文中的所有配置和代码我都测试过了 是没有问题的 如果你的有问题 直接粘贴异常原因 另外前提最起码是保证依赖版本没有问题
01/20 13:26
回复
举报
报400 感觉没有retrofit好用
01/20 17:51
回复
举报
很棒的分享
01/19 11:35
回复
举报
作者讲的特别好,又学到东西,加油
01/19 11:37
回复
举报
之前参数调优一直不会,终于学到了
01/19 11:40
回复
举报
编程鹿博主
老板 好眼光
01/20 13:27
回复
举报
更多评论
打赏
7 评论
7 收藏
3
分享
返回顶部
顶部