一.Spring Cloud Feign概念引入
通过前面的介绍,我们了解如何通过Spring Cloud ribbon进行负责均衡,如何通过Spring Cloud Hystrix进行服务断路保护,两者作为基础工具类框架应用在各种基础设施类微服务和业务类微服务中,并且成对存在,那么有没有更高层的封装,将两者的使用进一步简化呢? 有! 他就是Spring Cloud Feign。它基于Netflix Feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供两者强大的功能外,还提供了一种声明式的Web服务客户端定义方式。
二. 案例介绍
1. 项目目录及注册中心的配置如下:
2. 服务提供者保持不变,这里我们启用2个服务提供者,分别是2221和2222端口,服务名都是cart-service,如下图所示:
第二个:
3. 修改服务消费者
修改pom文件,如下图所示,这时候就不需要ribbon和hystrix,只需要引入feign依赖即可:
客户端配置如下:
修改启动类,添加@EnableFeignClients注解,这时候就不需要配置RestTemplate了:
4.接下来我们来看一个最基本的服务调用,就返回一个简单的字符串。
Service1里面编写服务方法showInfo:
Controller类提供访问接口
同样道理,Service2里面编写服务方法showInfo:
Controller类同Service1。
5.服务提供者准备就绪,接下来我们在服务消费者里面新建service接口:
通过@FeignClient注解指定服务名来绑定服务(这里的服务名字不区分大小写),然后再通过@RequestMapping来绑定服务下的rest接口,这样controller里面简单调用该接口即可,如下所示:
6.好了,接下来我们来顺序启动服务
(1)启动注册中心,端口号911
(2)启动服务提供者1,端口号2221
(3)启动服务提供者2,端口号2222
(4)启动服务消费者,端口号9999
如下图:
这时可以看到2个服务提供者和一个服务消费者注册了到了中心。
运行服务消费者,如图:
再执行:
说明负载均衡ok了。
三. Feign调用时候的参数传递问题
1. 简单参数传递,主要应用@RequestParam注解,接下来我们分别看服务提供者:
服务消费者的feign service层接口:
简单参数传递,一定要用@RequestParam("id")注解,且要带上value值,否则无法传递,如果又多个参数,中间用逗号分隔,每个参数都要应用@RequestParam注解。
服务消费者的controller层:
很简单,不需要@RequestParam注解。
反复运行,结果如下:
2. 很多参数用map传参,服务提供者,feign service层接口,消费者controller层接口编写方式分别如下,都需要加上@RequestParam注解:
服务提供者:
服务消费这的 feign service层接口:
消费者controller层:
为了方便演示,这时候我们用postman工具传递2个参数,反复运行如下:
Ok了。
3. 如果需要用实体对象传参,我们可以用@RequestBody注解,这时候,服务提供者,feign service层接口,需要加上@RequestBody注解,而消费者controller层不需要,如下所示:
服务提供者:
服务消费者的 feign service层接口:
消费者controller层:
Ok,save接口调用就不演示了。