SpringCloud入门实战(六)-OpenFeign服务调用

📝 学技术、更要掌握学习的方法,一起学习,让进步发生
👩🏻 作者:一只IT攻城狮
💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看,更准确、更专业。
💐学习建议:2、然后记住每个技术最关键的特性(通常一句话或者几个字),从主线入手,由浅入深学习。
❤️ 《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。项目demo:源码地址

在这里插入图片描述

一、Feign

Feign能干什么:
Feign旨在使编写Java Http客户端变得更容易。
在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。

Feign使用(核心:接口+注解):
在Feign的实现下,我们只需创建一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解,即可完成对服务提供方的接口绑定,简化了使用Spring cloud Ribbon时,自动封装服务调用客户端的开发量。
Feign也支持可拔插式的编码器和解码器。SpringCloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

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

小结:

  • Feign可帮助我们更加便捷,优雅的调用HTTP API。
  • 在SpringCloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。
  • Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
  • SpringCloud对Feign进行了增强,使Feign支持了SpringMVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。

一、Feign和OpenFeign区别

Feign停更了,推荐使用OpenFeign
官网:https://github.com/OpenFeign/feign

FeignOpenFeign
Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。Feign的使用方式是: 使用Feign的注解定义接口,调用这个接口就可以调用服务注册中心的服务OpenFeign是Spring Cloud 在Feign的基础上支持了SpringMVC的注解如@RequesMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
FeignOpenFeign

三、OpenFeign使用

创建新项目->建module->两个eureka服务模拟集群 ->两个payment服务模拟集群->建order服务模拟服务调用方。
项目源码:https://gitlab.com/springcloud5521407/springcloud-feign

1、查看下源码可知,feign和Eureka一样,低版本里边是集成了ribbon的:

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

在这里插入图片描述
2、这里我们整体用高版本搭建一下(低版本也一样步骤):

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

上边说过feign是使客户端变得容易,所以应该改造我们的服务调用方,order服务,接口+注解:

1) 启动类上加注解:@EnableFeignClients
在这里插入图片描述

2)创建接口PaymentFeignService,添加注解@FeignClient(value=“服务提供者应用名”)
接口里写服务原本调用的payment中方法
在这里插入图片描述
3)写Controller
注入我们刚自己写的接口实例PaymentFeignService
在这里插入图片描述
至此,就满足了我们正常的思维逻辑,本工程的Controller调用自己本工程的Service,替代了Ribbon+RestTemplate模式。
4)测试
浏览器访问Controller中我们新写的接口:http://localhost/feign/order/1,可以看到成功轮询访问8001、8002
在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只IT攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值