spring cloud openfeign踩坑记

以下内容起源自项目过程中使用openfeign无法连接目标服务端口后查询使用过的主要解决方案,如有其它建议,请评论告知

1.openfeign是什么?

OpenFeign 是 SpringCloud在Feign 的基础上支持了SpringMVC的注解,如@RequestMapping、@PostMapping等。OpenFeign 的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。

2.openfeign与feign的区别

  
Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。使用Feign非常简单—创建一个接口,并在接口上添加一些注解,代码就完成了。Feign具备可插拔的注解、支持多种注解,例如Feign自带的注解或者JAX-RS注解等`。    

OpenFeign 是 SpringCloud在Feign 的基础上支持了SpringMVC的注解,如@RequestMapping等。OpenFeign 的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类`,实现类中做负载均衡并调用其他服务。

目前版本主要采用openfeign结合springboot框架进行微服务开发

3.openfeign的使用

在springboot项目中,openfeign的使用非常简单,定义一个调用接口,接口下定义服务提供方的API接口获取方法并配合相应注解即可

即接口+注解方式,注意需要在启动类上添加@Enable注解

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

4.问题发现及解决过程

项目为微服务项目,目的是调用服务提供方的邮件发送接口,由于服务提供方定义的API为post方式同时采用x-www-form-urlencoded接收文本,使用过程中出现400/401等问题,以下为解决过程

1.检查目标服务API

首先检查了目标服务方提供的API是否能够单独访问,检查代码基本常识性问题比如依赖是否正确

2.替换调用client

实际上这一步属于对Openfeign性能参数的调整优化,当时解决问题时查看其他博客搬来使用,并不能解决核心问题

Feign 在默认情况下使用的是 JDK 原生的 URLConnection 发送HTTP请求,没有连接池,但是对每个地址会保持一个长连接,即利用 HTTP 的 persistence connection。可以用 Apache 的 HttpClient 替换 Feign 原始的 HTTP Client,通过设置连接池、超时时间等对服务之间的调用调优。 Spring Cloud 从 Brixton.SR5 版本开始支持这种替换

添加依赖后在配置文件中定义即可

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
    <version>11.8</version>
</dependency>

3.openfeign版本问题导致的字段重复

在debug的过程中发现,调用请求时出现重复字段比如content-length,因此定义feign的配置类进行拦截去重,注意使用配置类需要在接口中进行配置

4.请求方法中注解使用问题

由于需要上传表单进行调用,最初采用@RequestParm注解将多个参数进行传入,但是发现参数中包含正斜杠/,无法解析编码

因此将多个参数封装为一个实体类后调整为@RequstBody即可实现功能

这里要注意的是查询其他博客时推荐采用@QueryMap,@SpringQueryMap均不适用本例,无法实现功能

以上为排坑的全部过程,对以下博客文章作者表示感谢,参考到了非常有价值的博客:

https://issavior.blog.csdn.net/article/details/125493986?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-1-125493986-blog-122118499.t5_layer_eslanding_D_0&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-1-125493986-blog-122118499.t5_layer_eslanding_D_0&utm_relevant_index=1

https://blog.csdn.net/qq_40814565/article/details/124989317

https://blog.csdn.net/qq_36256590/article/details/122588124

https://blog.csdn.net/wo18237095579/article/details/83377938

https://blog.csdn.net/qq_43437874/article/details/122235580

https://www.proyy.com/6968046250545381390.html

 

posted @ 2022-10-03 11:47  面向机器编程  阅读(610)  评论(0编辑  收藏  举报