spring-cloud-starter-feign导入失败

Feign和Ribbon

Feign 和 Ribbon 是 Spring Cloud 的 Netflix 中提供的两个实现软负载均衡的组件,Ribbon 和 Feign 都是用于调用其他服务的,方式不同。Ribbon可以在客户端配置 RibbonServerList(服务端列表),使用 HttpClientRestTemplate 模拟 http 请求,步骤相当繁琐。Feign 则是在 Ribbon 的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建 http 请求,就像是调用自身工程的方法调用,而感觉不到是调用远程方法,使得编写客户端变得非常容易。。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

要使用Feign,请创建一个接口并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud添加了对Spring MVC注释的支持,并支持使用HttpMessageConvertersSpring Web中默认使用的注释。Spring Cloud集成了RibbonEureka以及Spring Cloud LoadBalancer,以在使用Feign时提供负载平衡的http客户端。

Feign能干什么

Feign 旨在使编写 Java HTTP 客户端变得更加容易。

前面在使用 Ribbon + RestTemplate 时, 利用 RestTemplate 请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,对于服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常会针对每个微服务自行封装一些客户端类来包装这些服务依赖的调用。所以,Feign 在此基础上除了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign 的实现下,我们只需要创建一个接口,并使用注解的方式来配置它(以前是Dao 接口上main标注 Mapper 注解,现在是一个微服务接口上面标注一个Feign 注解即可),即可完成对一个服务提供方的接口绑定,简化了使用 Spring cloud Ribbon 时, 自动封装服务调用客户端。

Feign 集成了 Ribbon

利用 Ribbon 维护了服务方的服务列表信息,并且通过轮询实现了客户端的负载均衡,而 Ribbon 不同的是,通过Feign 只需要定义服务绑定接口且以声明式的方法,优雅而简单的实现了服务调用。

Feign 与 OpenFeign 的区别

Feign

feign 是 spring cloud 组件中的一个轻量级 RESTful的HTTP 服务客户端 Reign 内置了 Ribbon, 用来做客户端服务在均衡,去调用服务注册中心的服务,Feign 的使用方式是:使用Feign 注解自定义接口,调用这个接口,就可以低哦啊用服务注册中心的服务。

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

请注意,用上面这种方法导入依赖可能或报错
我开始是按照这种方法导入的依赖,但是导入一直失败,我以为是下载jar的过程中损坏了,在仓库中删除jar包之后重新下载还是不行。
后来我发现指定feign的版本号就能导入成功了,如下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-feign</artifactId>
	<version>1.4.7.RELEASE</version>
</dependency>

最新版本是1.4.7。

OpenFeign

openfeign 是 spring cloud 在 feign 的基础上支持 spring mvc注解 ,如 @RequestMapping 等等,OpenFeign 的@FeignClient 可以解析Spring MVC 的 @RequestMapping注解下的接口,并通过动态代理的方式生产实现类 ,实现类中做负载均衡并且 低耦合调用其他服务。
导入方法:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
原文地址:https://www.cnblogs.com/xiaozhengtongxue/p/13549152.html