Spring Cloud Feign的两种使用姿势

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Cloud Feign的两种使用姿势相关的知识,希望对你有一定的参考价值。

参考技术A 最近结合一些别人的开源项目来学习Spring Cloud,其中关于服务消费这方面的一个很便利的工具 Feign让我记忆颇深。虽然网上的Demo和例子不胜枚举,但大多比较分散,本文就来集中记录一下声明式客户端 Feign的一些使用姿势。

三个步骤即可搞定:

创建一个名为 eureka_server 的 SpringBoot工程,并在pom.xml中添加好对应依赖

修改应用主类,添加 @EnableEurekaServer 注解

配置 application.properties 文件如下所示:

浏览器访问之:

此时还没有任何服务注册上来。

创建一个名为 service_provider 的 SpringBoot工程,并在pom.xml中添加好对应依赖:

添加 @EnableDiscoveryClient 注解

提供一个Restful接口而已,该接口的作用是获取服务器上的时间并返回

浏览器访问服务注册中心,我们发现服务提供者 service_provider 已经注册到 eureka_server 上:

同时浏览器访问: http://localhost:1112/test?param=www.codesheep.cn ,可以测试服务提供 service_provider 提供的接口工作正常

接下来我们创建服务消费者,是 Feign该登场的时候了!

主要是添加有关 Feign客户端的一些注解而已

很明显其内部用 @FeignClient( value = "service-provider" ) 声明的方式指向了 服务提供者,而接口方法则实现了对 服务提供者接口的实际调用

注意,这是服务消费者提供的 Rest接口

我们先去服务注册中心上看看,发现 服务消费者也注册上来了:

然后我们浏览器访问 服务消费者提供的Rest接口: http://localhost:1113/consumer/date?param=www.codesheep.cn

这样我们就通过 服务消费者的 Feign客户端 取到了服务提供者 给予的接口数据。

浏览器访问: http://localhost:1113/consumer2/date?param=www.codesheep.cn

Spring Cloud Feign实现自定义复杂对象传参

参考技术A

现我们服务提供端有如下的根据用户查询条件获取满足条件的用户列表controller接口

我们在使用Feign构建远程服务请求客户端的时候,会发现Feign官方版本是不支持GET请求传递自定义的对象,当我们的请求参数很多的时候,我们只能选择以下两种方式:

那么我们希望能有一种方式 保持跟controller完全一致只需要传递自定义的对象 ,既让服务提供端开发人员爽,也让服务消费端开发人员爽,两全其美。既然Feign官方不支持,那我们就自己动手撸源码,自己来实现。

对比之前的@RequestParam和Map用法,方法参数变少了,User对象复用了,对服务提供端和消费端都更方便了

最近在调研spring cloud版本升级,发现新版的Feign也支持了自定义对象传参,实现方式大同小异

以上是关于Spring Cloud Feign的两种使用姿势的主要内容,如果未能解决你的问题,请参考以下文章

spring cloud feign调用service的两种POST传值方式

springcloud 服务调用的两种方式

Spring Cloud Feign实现自定义复杂对象传参

08 在Spring Cloud中使用Feign

6Sping Cloud Feign

spring cloud学习--Feign