Spring Cloud 之 Feign 调用实例

906 阅读2分钟

一、简介

基于 Spring Cloud 的微服务架构,各个微服务之间通过 Feign 调用。所有微服务注册在 Eureka 上,Spring Cloud 将它集成在自己的子项目 spring-cloud-netflix 中,实现 Spring Cloud 的「服务发现」功能。 在 Spring Cloud Netflix 栈中,各个微服务都是以 HTTP 接口的形式暴露自身,因此在调用远程服务时就必须使用 HTTP 客户端。我们可以使用 JDK 原生的 URLConnection、Apache 的 Http Client、Netty 的异步 HTTP Client 以及 Spring 的 RestTemplate。当然,用起来最方便的当属 Feign 了。 Feign 是一种声明式、模板化的 HTTP 客户端,包含了 Ribbon 和 Hystrix,支持负载均衡和容错。在 Spring Cloud 中,创建接口并引用 @FeignClient 注解即可引用 Feign,以实现微服务间的远程调用。 Feign 工作原理:Spring Cloud 应用在启动时,先检查配置是否有@EnableFeignClients 注解,如果有该注解,则开启包扫描,扫描标有 @FeignClient 注解的接口,生成代理,并注册到 Spring 容器中。生成代理时 Feign 为每个接口方法创建一个 RequetTemplate 对象,该对象封装了 HTTP 请求需要的全部信息,包括请求参数名、请求方法等信息,Feign 的模板化就体现在这里。

二、调用

1、添加依赖

2、开启feign

3、定义调用接口

使用 @FeignClient(name = "服务名") 注解,来指定调用哪个服务。 @FeignClient 注解的常用属性如下:

  • name:指被调用的微服务名称,可省略。@FeignClient(name = "服务名") 亦可写作 @FeignClient( "服务名")。
  • value:和 name 互为别名,也是指被调用的微服务名称。@FeignClient(name = "服务名") 亦可写作 @FeignClient(value= "服务名")。
  • url:直接添加硬编码的路径。一般用于调试,可以手动指定 @FeignClient 调用的地址,此时被调用的服务可以不注册到 Eureka 中心上。
  • configuration:标明 FeignClient 的配置类,使用默认即可。

topic/test是portal服务中Controller对应的请求URL

启动eureka、config和zuul以及portal等服务。测试OK。