08年出来做外包,用过Cloud,当时微服务间的相互调用用的还是Feign,其中两年没做过Cloud的项目开发了,重新学了新版本,才知道老一辈那些组件都已经停更了。现在用的都是OpenFeign,简单的理解为Feign的升级版。
区别:
同:
Feign和OpenFeign作用一样,都是进行远程调用的组件。
里面都内置了Ribbon。
都是加在消费端的注解,让消费端可以调用其他生产者的服务。
异:
依赖不同,一个是spring-cloud-starter-feign,一个是spring-cloud-starter-openfeign。
使用方式不同,Feign直接加在接口上并且不支持SpringBoot注解。OpenFeign支持@RequestMapping("/demo/test")这种注解。
OpenFeign简单使用:
(1)加入依赖
<!--OpenFeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
(2)修改yml配置文件,添加消费者入注册中心,同时开启fetch

(3)主启动类上面加:@EnableFeignClients

(4)controller正常写,在调用的service interface 那里加:

这里的Value,就是服务注册中心的server name,这样就绑定了Feign为该接口会进行哪个server的远程调用。这里有个很突出的特点,可以在接口里的方法加@RequestMapping,这个就是OpenFeign做的一个升级,通过JDK动态代理的方式对该接口进行增强,产生ProxyDemoService代理实现类,根据服务名称从Eureka提供的注册表单中拿到可用的服务节点,再根据Ribbon配置的负载均衡算法去选定某个服务节点开始建立连接,发起调用,解析响应。
不实用Feign做调用也行,那就用RestTemplate。一样能发起请求获得响应,一样能够通过服务名进行轮询,随机或者权重,哈希,自己DIY~


本文介绍了OpenFeign与Feign在微服务调用中的异同。相同点在于两者都是用于远程调用的组件,内建了Ribbon进行负载均衡。不同之处在于依赖包不同,OpenFeign支持SpringBoot注解,使用更加灵活。通过添加OpenFeign依赖,配置yml,启用注解,即可实现服务调用。OpenFeign的一个显著特点是接口方法上可添加@RequestMapping,通过JDK动态代理实现服务选择。此外,文章提到了替代方案RestTemplate。
&spm=1001.2101.3001.5002&articleId=108767140&d=1&t=3&u=d5489fdcab8242b7a217bd99fdb52c80)
1296

被折叠的 条评论
为什么被折叠?



