Feign,空耳"费因(轻声)".是Netfix开发的声明式的HTTP客户端.可以帮助我们更加方便快捷的调用HTTP API.
在SpringCloud中,使用Feign非常简单--引入Feign依赖,创建Feign接口,并在接口上添加对应的注解即可进行接口的调用.
【SpringCloud的openfeign依赖对Feign进行了增强,使得Feign支持了Spring MVC注解,并整合了Eureka和Ribbon】
创建一个基于module的Springboot项目.
在springcloud-demo项目上右键"New"--"Module"
在New Module窗口选择Spring Initializr项,表示创建一个SpringBoot项目
输入自己心仪的项目信息
在依赖选择中,选择"Web"--"Spring Web",以及"Spring Cloud Discovery"--"Eureka Discovery Client"
创建成功后,项目的结构如下
consumer-feign项目创建好后,第一步需要引入Feign依赖.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
第二步,配置application.yml和启动类
application.yml
spring:
application:
name: springcloud-consumer-feign
security:
user:
name: shanghai
password: 111
server:
port: 8182
eureka:
instance:
hostname: localhost
prefer-ip-address: true
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@localhost:8761/eureka/
ConsumerFeignApplication启动类
第三步,创建Feign接口并指定该接口远程调用的服务虚拟主机名以及接口服务
provider项目根据Id获取用户信息接口如下.
根据provider项目接口编写Feign
至此.UserFeign编写好了,可以直接基于接口进行调用了.
在consumer-feign项目中,创建UserController,并通过UserFeign远程调用provider.
由于Feign默认整合了Ribbon,为了验证consumer-feign是否具备负载均衡的能力,所以provider开启两个实例占用不同的端口.
分别启动eureka,provider,consumer-feign项目,然后进入服务发现中心查看.
输入设置好的basic账号密码
feign启动了一个实例,占用8182端口.
provider启动了两个实例,分别占用8081和8082端口.
在浏览器上输入 http://localhost:8182/user/{id},多次刷新页面,查看consumer-feign的调用情况
多次刷新页面会发现,consumer-feign是有选择性地调用provider项目的实例.说明Feign是默认整合了Ribbon的.