通过RestTemplate调用其他微服务的API时,所需的按时必须在请求的URL中进行拼接,这显然不是开发友好的方式——其存在不便之处:1)拼接URL;2)resttemplate.getForObject这两处代码都比较模板化,同时拼接url比较low。

  Feign就提供了不用拼接URL同时便于管理简化微服务调用的方案,其是一个声明式的Web Service客户端,其功能就是让Web Service调用更加简单。具体操作大致是:Feign提供HTTP请求模板,通过编写简单的接口并插入注解就可以万彩城HTTP请求的参数、格式、地址等信息的声明。这样就实现了类似于Dubbo的调用方式——服务消费者获取服务提供者的接口,然后像调用本地接口方法一样去调用,而实际却是远程调用。

  利用Feign对项目的访问进行改造应用如下(服务消费者改造):

  1、引入Feign坐标

      

Java springcloud微服务 springcloud 微服务调用_服务提供者

  2、在微服务的应用引导类中增加@EnableFeignClients注解,用来为应用开启Feign相关功能

      

Java springcloud微服务 springcloud 微服务调用_微服务_02

  3、之前一个服务对另一个微服务的调用都是在服务中完成,更改成Feign后需要新增一个接口。应用启动时Feign就会使用动态代码机制根据我们所定义的服务接口生成相应的类实例,并注入到Spring的应用上下文中。这样就可以像使用普通Bean一样使用该服务,具体如下:

      

Java springcloud微服务 springcloud 微服务调用_Java springcloud微服务_03

    @FeignClient注解中的name属性值设置为服务提供者微服务名称:hp-service,这样Feign就可以通过Eureka服务器获取用户微服务实例并进行调用。而所定义的接口中方法使用@RequestMapping进行注解。

    关于fallback,其为消费端本地对接口的一个实现。如果微服务调用失败,启用本地提供的接口实现反馈给客户端:

      

Java springcloud微服务 springcloud 微服务调用_服务调用_04

    服务提供者配置及代码如下:

      

Java springcloud微服务 springcloud 微服务调用_Java springcloud微服务_05

      

Java springcloud微服务 springcloud 微服务调用_微服务_06

     微服务调用成功,需保持服务提供者中方法与服务消费者接口中方法@RequestMapping中映射内容一致。